Parcourir avec 'array_walk'
Fait partie de la section Logique & Flux du Journey PHP de Coddy. Leçon 44 sur 68.
La fonction array_walk() offre une approche différente du traitement des tableaux par rapport à array_map(). Alors que array_map() crée un nouveau tableau contenant les valeurs transformées, array_walk() modifie directement le tableau d’origine en appliquant une fonction de rappel à chaque élément sur place.
Cette fonction est particulièrement utile lorsque vous souhaitez modifier le tableau existant sans en créer une copie. La fonction de rappel que vous fournissez reçoit chaque élément du tableau par référence, ce qui vous permet de modifier directement les valeurs d’origine.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items est maintenant : ["Item: apple", "Item: banana", "Item: orange"]
?>Remarquez comment la fonction de rappel utilise &$value pour recevoir l’élément du tableau par référence. Cela permet à la fonction de modifier directement l’élément du tableau d’origine. Le deuxième paramètre $key permet d’accéder à la clé de l’élément actuel, bien qu’il ne soit pas toujours nécessaire pour les transformations simples.
array_walk() prend également en charge un troisième argument facultatif qui vous permet de transmettre des données supplémentaires directement à votre fonction de rappel. Cela est utile lorsque votre transformation dépend d’une valeur définie en dehors du tableau, comme un préfixe, un suffixe ou toute autre entrée dynamique.
Lorsque vous transmettez un troisième argument à array_walk(), votre fonction de rappel le reçoit comme troisième paramètre :
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products is now: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>Ici, $prefix est transmis comme troisième argument à array_walk(), et la fonction de rappel le reçoit sous le nom de $category. De cette façon, vous pouvez réutiliser la même fonction de rappel avec différents préfixes sans coder de valeurs en dur à l’intérieur.
Défi
FacileVous recevrez deux entrées : une liste de noms de produits séparés par des virgules et un préfixe de catégorie. La première entrée contient les noms de produits sous forme de chaîne au format laptop,mouse,keyboard,monitor, et la deuxième entrée est un texte servant de préfixe de catégorie (exemple : Electronics).
Lisez les deux entrées, convertissez les noms de produits séparés par des virgules en tableau, créez une fonction de rappel qui ajoute le préfixe de catégorie à chaque nom de produit au format "Category: ProductName", utilisez array_walk() avec votre fonction de rappel pour modifier directement le tableau d'origine, puis affichez chaque nom de produit modifié sur une ligne distincte.
Votre fonction de rappel doit utiliser le paramètre &$value pour modifier les éléments du tableau par référence. La fonction doit concaténer le préfixe de catégorie avec deux-points et une espace, suivis du nom du produit.
Format de l'entrée :
- Première ligne : noms de produits séparés par des virgules (exemple :
laptop,mouse,keyboard,monitor) - Deuxième ligne : texte servant de préfixe de catégorie (exemple :
Electronics)
Sortie attendue : Chaque nom de produit modifié est affiché sur une ligne distincte au format Category: ProductName
Essayez vous-même
<?php
// Lire les noms de produits séparés par des virgules
$products_input = trim(fgets(STDIN));
// Lire le préfixe de catégorie
$category = trim(fgets(STDIN));
// Convertir la chaîne séparée par des virgules en un tableau
$products = explode(',', $products_input);
// TODO: Écrivez votre code ci-dessous
// Créer une fonction de rappel qui modifie chaque nom de produit en ajoutant le préfixe de catégorie
// Utiliser array_walk() avec votre fonction de rappel pour modifier le tableau
// Afficher chaque nom de produit modifié sur une ligne séparée
foreach ($products as $product) {
echo $product . "\n";
}
?>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