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 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.

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

Entraînez-vous par vous-même : Compilateur PHP en ligne