Menu
Coddy logo textTech

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 array_filter(). Au lieu de retourner un nouveau tableau, elle traite tous les éléments d'un tableau pour produire une valeur unique. Cela la rend parfaite pour des opérations telles que le calcul de totaux, la recherche de maximums ou la combinaison de tous les éléments en un seul résultat.

La fonction nécessite trois paramètres : le tableau à traiter, une fonction de rappel qui définit comment combiner les éléments, et une valeur initiale facultative. La fonction de rappel reçoit deux paramètres : le résultat accumulé (appelé le « 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);
// Result: 15
?>

Dans cet exemple, la fonction commence avec une valeur initiale de 0, puis appelle de manière répétée addNumbers avec le total cumulé et chaque élément du tableau. Ce processus d'accumulation se poursuit jusqu'à ce que tous les éléments soient traités, vous laissant avec la valeur réduite finale.

quiz iconTestez-vous

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

quiz iconTestez-vous

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

quiz iconTestez-vous

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

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 de caractères 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 (callback) 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 en un seul résultat, et affichez le résultat final.

Détails des opérations :

  • S (Somme) : Additionnez tous les nombres ensemble (valeur initiale : 0)
  • P (Produit) : Multipliez tous les nombres ensemble (valeur initiale : 1)
  • M (Maximum) : Trouvez 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 retourner 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

Aide-mémoire

La fonction array_reduce() traite tous les éléments d'un tableau pour produire une valeur unique, idéale pour calculer des totaux ou combiner des éléments.

Elle nécessite trois paramètres : le tableau à traiter, une fonction de rappel (callback) et une valeur initiale facultative. La fonction de rappel reçoit le résultat accumulé (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
?>

Utilisez number_format($total, 2) pour formater les résultats avec 2 décimales.

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 basée sur le type d'opération
// Utiliser array_reduce() avec votre fonction de rappel et la 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