Menu
CoddyTech

Réduire avec 'array_reduce'

Fait partie de la section Logique & Flux du Journey PHP de Coddy. Leçon 43 sur 68.

La fonction array_reduce() adopte une approche différente de array_map() et de array_filter(). Au lieu de renvoyer un nouveau tableau, elle traite tous les éléments d’un tableau pour produire une seule valeur. Cela la rend idéale pour des opérations comme le calcul de totaux, la recherche de valeurs maximales ou la combinaison de tous les éléments en un seul résultat.

La fonction prend le tableau à traiter et une fonction de rappel qui définit comment combiner les éléments, ainsi qu’un troisième paramètre facultatif : la valeur initiale. La fonction de rappel reçoit deux paramètres : le résultat accumulé (appelé « carry ») et l’élément actuel du tableau.

<?php
function addNumbers($carry, $item) {
    return $carry + $item;
}

$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Résultat : 15
?>

Dans cet exemple, la fonction commence par une valeur initiale de 0, puis appelle à plusieurs reprises addNumbers avec le total courant et chaque élément du tableau. Ce processus d'accumulation se poursuit jusqu'à ce que tous les éléments aient été traités, et vous obtenez alors la valeur réduite finale.

challenge icon

Défi

Facile

Vous recevrez deux entrées : une liste de nombres séparés par des virgules et un type d’opération. La première entrée contient des nombres sous forme de chaîne au format 5,10,15,20,25, et la deuxième entrée est un caractère unique indiquant l’opération : S pour la somme, P pour le produit ou M pour le maximum.

Lisez les deux entrées, convertissez les nombres séparés par des virgules en un tableau d’entiers, créez une fonction de rappel personnalisée qui effectue l’opération spécifiée, utilisez array_reduce() avec votre fonction de rappel et une valeur initiale appropriée pour traiter tous les nombres et obtenir un résultat unique, puis affichez le résultat final.

Détails des opérations :

  • S (Somme) : additionner tous les nombres (valeur initiale : 0)
  • P (Produit) : multiplier tous les nombres (valeur initiale : 1)
  • M (Maximum) : trouver le plus grand nombre (valeur initiale : le premier nombre du tableau ou un nombre très petit)

Votre fonction de rappel doit accepter deux paramètres : le résultat accumulé (carry) et l’élément actuel du tableau (item), puis renvoyer la valeur accumulée mise à jour en fonction du type d’opération.

Format d’entrée :

  • Première ligne : nombres séparés par des virgules (exemple : 5,10,15,20,25)
  • Deuxième ligne : type d’opération — soit S, P ou M (exemple : S)

Sortie attendue : Un nombre unique représentant le résultat de l’opération de réduction

Essayez vous-même

<?php
// Lire l'entrée
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));

// Convertir la chaîne séparée par des virgules en un tableau d'entiers
$numbers = array_map('intval', explode(',', $numbers_input));

// TODO: Écrivez votre code ci-dessous
// Créer une fonction de rappel selon le type d'opération
// Utiliser array_reduce() avec votre fonction de rappel et une valeur initiale appropriée


// Afficher le résultat
echo $result;
?>
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur PHP en ligne