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.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileVous 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, ouM(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;
?>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
1Fonctions avancées
Fonctions anonymesClosures et 'use'Fonctions fléchéesFonctions de rappelUtilisation de 'call_user_func'Fonctions variablesPassage par référenceFonctions récursivesRécapitulatif : Mélange de fonctions4Tableaux multidimensionnels
Créer un tableau 2DAccéder aux éléments d'un tableau 2DModifier les éléments d'un tableau 2DItérer avec des boucles imbriquéesTableaux associatifs 2DRécapitulatif : Exercice de grille simple2Manipulations avancées de tableaux
Ajouter avec 'array_push'Supprimer avec 'array_pop'Ajouter avec 'array_unshift'Supprimer avec 'array_shift'Fusionner des tableaux indexésFusionner des tableaux associatifsExtraire avec 'array_slice'Valeurs avec 'in_array'Clés avec 'array_search'Récapitulatif : Exercice Playlist3Tri des tableaux
Trier les tableaux indexés par ordre croissantTrier les tableaux indexés par ordre décroissantTrier les tableaux associatifs par valeurTrier les tableaux associatifs par cléTri par ordre naturelTri personnalisé avec 'usort'Récapitulatif : Tri d'un classement6Fonctions de tableau d'ordre supérieur
Transformer avec 'array_map''array_map' avec une fonction personnaliséeFiltrer avec 'array_filter''array_filter' avec une fonction personnaliséeRéduire avec 'array_reduce'Parcourir avec 'array_walk'Récapitulatif : Traitement des données