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 pour le traitement des tableaux par rapport à array_map(). Alors que array_map() crée un nouveau tableau avec des 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, vous permettant de modifier directement les valeurs originales.
<?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 d'origine du tableau. Le second paramètre $key donne accès à la clé de l'élément actuel, bien qu'il ne soit pas toujours nécessaire pour des transformations simples.
array_walk() accepte également un troisième argument facultatif — des données supplémentaires qui sont transmises directement à votre fonction de rappel (callback) en tant que troisième paramètre. C'est utile lorsque votre transformation dépend d'une valeur définie en dehors du tableau.
<?php
function addPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix", "Item: ");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
?>Ici, la chaîne
"Item: " est transmise comme troisième argument à array_walk() et reçue en tant que $prefix à l'intérieur du callback. Cela vous permet de réutiliser le même callback avec différentes valeurs supplémentaires.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 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 de caractères au format laptop,mouse,keyboard,monitor, et la deuxième entrée est un texte 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 un tableau, créez une fonction de rappel (callback) 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, et 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 un espace, suivi du nom du produit.
Format d'entrée :
- Première ligne : Noms de produits séparés par des virgules (exemple :
laptop,mouse,keyboard,monitor) - Deuxième ligne : Texte du préfixe de catégorie (exemple :
Electronics)
Résultat attendu : Chaque nom de produit modifié affiché sur une ligne distincte au format Category: ProductName
Aide-mémoire
La fonction array_walk() modifie directement le tableau d'origine en appliquant une fonction de rappel à chaque élément sur place, contrairement à array_map() qui crée un nouveau tableau.
La fonction de rappel reçoit chaque élément du tableau par référence en utilisant &$value, ce qui permet une modification directe des valeurs d'origine. Le deuxième paramètre $key permet d'accéder à la clé de l'élément actuel.
array_walk() accepte également un troisième argument facultatif — des données supplémentaires qui sont transmises à la fonction de rappel en tant que troisième paramètre. C'est utile lorsque votre fonction de rappel a besoin d'informations additionnelles pour traiter chaque élément.
<?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"]
// Utilisation du troisième argument facultatif (données supplémentaires) :
function applyPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$fruits = ["apple", "banana", "orange"];
array_walk($fruits, "applyPrefix", "Fresh: ");
// $fruits est maintenant : ["Fresh: apple", "Fresh: banana", "Fresh: orange"]
?>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 distincte
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ées