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.
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 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,PouM(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;
?>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éesEntraînez-vous par vous-même : Compilateur PHP en ligne