W3docs

La fonction array_walk() de PHP : comment l'utiliser pour manipuler efficacement les tableaux

Apprenez comment array_walk() de PHP applique un callback à chaque élément d'un tableau en place, avec syntaxe, exemples, pièges et comparaison à array_map().

array_walk() est une fonction PHP intégrée qui applique un callback à chaque élément d'un array, en place. Contrairement à array_map(), qui construit et renvoie un nouvel array, array_walk() parcourt l'array existant et vous permet de modifier chaque élément directement par référence. Cette page couvre sa syntaxe, quand l'utiliser plutôt qu'une simple boucle foreach ou array_map(), les pièges courants liés à la modification des valeurs, et comment parcourir des arrays imbriqués avec array_walk_recursive().

Syntaxe

array_walk(array &$array, callable $callback, mixed $arg = null): true
ParamètreRequisDescription
$arrayOuiL'array à parcourir. Il est passé par référence, afin que le callback puisse modifier ses éléments.
$callbackOuiUn callable exécuté une fois par élément. Sa signature est callback($value, $key, $arg). Pour modifier un élément, déclarez le premier paramètre par référence : function (&$value) { ... }.
$argNonUn argument supplémentaire optionnel passé en troisième paramètre à chaque appel du callback.

array_walk() retourne toujours true (elle retourne false uniquement en cas d'erreur de type). Elle ne retourne pas l'array modifié — l'array que vous avez passé est modifié directement.

Pourquoi passer $value par référence ? Sans le &, le callback reçoit une copie de chaque élément, et toute modification est ignorée. Ajoutez & (comme dans function (&$value)) et vos modifications sont répercutées dans l'array d'origine. Voir les fonctions PHP et callable pour en savoir plus sur les callbacks.

Exemples d'utilisation de array_walk()

Exemple 1 : Modifier des arrays

L'un des usages principaux de array_walk() est de modifier des arrays. Grâce à sa capacité à appliquer une fonction définie par l'utilisateur à chaque élément d'un array, c'est un moyen simple de transformer un array selon vos besoins spécifiques. Voici un exemple illustrant comment utiliser array_walk() pour changer la casse de tous les éléments d'un array.

Exemple PHP 1 : Modifier des arrays

php— editable, runs on the server

Résultat :

Array
(
    [0] => APPLE
    [1] => BANANA
    [2] => CHERRY
)

Dans cet exemple, nous définissons d'abord un array à trois éléments. Nous définissons ensuite une fonction définie par l'utilisateur appelée change_case() qui utilise la fonction PHP intégrée strtoupper() pour convertir la casse de chaque élément en majuscules. Nous utilisons ensuite la fonction array_walk() pour appliquer la fonction change_case() à chaque élément de l'array. Enfin, nous utilisons la fonction print_r() pour afficher l'array modifié.

Exemple 2 : Effectuer des calculs

Un autre usage puissant de array_walk() est d'effectuer des calculs sur des arrays. Grâce à sa capacité à appliquer une fonction définie par l'utilisateur à chaque élément d'un array, vous pouvez utiliser array_walk() pour réaliser un large éventail de calculs sur vos arrays. Voici un exemple illustrant comment utiliser array_walk() pour calculer la somme de tous les éléments d'un array.

Exemple 2 : Effectuer des calculs

php— editable, runs on the server

Résultat :

The total sum is: 15

Dans cet exemple, nous définissons d'abord un array à cinq éléments. Nous définissons ensuite une fonction anonyme qui ajoute chaque élément à un total cumulé. Nous utilisons la fonction array_walk() pour appliquer cette fonction à chaque élément de l'array. Enfin, nous affichons la somme totale à l'aide de l'instruction echo.

Exemple 3 : Parcourir des arrays multidimensionnels

array_walk() seul ne visite que les éléments de premier niveau, donc sur un array imbriqué, votre callback recevrait les arrays internes plutôt que les valeurs feuilles. Pour les données imbriquées, utilisez la fonction complémentaire array_walk_recursive(), qui descend dans les sous-arrays et exécute votre callback sur chaque valeur feuille. Ici, nous mettons en majuscules toutes les chaînes d'un array à deux niveaux.

Exemple PHP 3 : Travailler avec des arrays multidimensionnels

php— editable, runs on the server

Résultat :

Array
(
    [0] => Array
        (
            [0] => APPLE
            [1] => BANANA
            [2] => CHERRY
        )

    [1] => Array
        (
            [0] => ORANGE
            [1] => GRAPE
            [2] => PINEAPPLE
        )

)

array_walk_recursive() parcourt la structure en profondeur d'abord et appelle change_case() sur chaque string feuille, conservant la forme imbriquée de l'array tout en mettant en majuscules chaque valeur.

Pièges courants

  • Oublier le &. Si le premier paramètre de votre callback n'est pas par référence (function (&$value)), vos modifications sont silencieusement ignorées. C'est l'erreur la plus fréquente avec array_walk().
  • Retourner une valeur ne sert à rien. array_walk() ignore tout ce que votre callback retourne. Elle n'écrit que les modifications effectuées via le paramètre de référence. Si vous souhaitez construire une copie transformée, utilisez array_map().
  • L'ordre des paramètres du callback est ($value, $key) — la valeur en premier, puis la clé. C'est l'inverse de ce à quoi certains développeurs s'attendent.
  • Vous ne pouvez pas ajouter ni supprimer des clés. Définir $array = null à l'intérieur du callback, ou modifier la structure de l'array pendant le parcours, entraîne un comportement indéfini. Utilisez array_walk() uniquement pour transformer les valeurs en place.

array_walk() vs. array_map() vs. foreach

OutilModifie en place ?RetourneIdéal pour
array_walk()Oui (via référence)trueMuter un array existant, ou exécuter un effet de bord par élément
array_map()NonUn nouvel arrayProduire une copie transformée sans toucher l'original
foreachOui (avec &$value)Itération générale avec break/continue et contrôle de flux complet
array_reduce()NonUne valeur uniqueRéduire un array à un seul résultat (somme, concaténation, etc.)

Optez pour array_walk() lorsque vous souhaitez conserver le même array et modifier ses valeurs en place, ou lorsque vous avez besoin que chaque callback reçoive à la fois la valeur et la clé. Choisissez array_map() lorsque vous voulez un nouvel array et laisser la source intacte.

Conclusion

array_walk() applique un callback à chaque élément d'un array en place, ce qui en fait un moyen élégant de transformer des valeurs, d'exécuter des effets de bord par élément, ou de traiter des paires clé/valeur sans écrire de boucle explicite. N'oubliez pas de prendre la valeur par référence lorsque vous souhaitez la modifier, d'utiliser array_walk_recursive() pour les arrays imbriqués, et de préférer array_map() lorsque vous préférez construire un nouvel array plutôt que de muter l'original. Pour en savoir plus sur l'itération sur les arrays, consultez les tableaux PHP et la boucle foreach.

Pratique

Pratique
Quelle est la fonctionnalité de la fonction 'array_walk()' en PHP ?
Quelle est la fonctionnalité de la fonction 'array_walk()' en PHP ?
Was this page helpful?