Menu
Coddy logo textTech

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.
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 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";
}
?>
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