W3docs

each()

PHP each() retournait la paire clé-valeur courante et avançait le pointeur. Dépréciée en 7.2, supprimée en 8.0. Comportement et alternatives foreach.

Introduction

La fonction each() était historiquement utilisée pour parcourir un array élément par élément, renvoyant la paire clé-valeur courante et avançant le pointeur interne du tableau. Elle alimentait un idiome courant avec une boucle while pour itérer sur des arrays avant que foreach ne devienne le standard.

Important : each() a été dépréciée en PHP 7.2 et complètement supprimée en PHP 8.0. L'appeler en PHP 8+ provoque une Error fatale. Cette page documente son comportement historique pour vous aider à lire et migrer du code ancien — mais ne l'utilisez jamais dans du nouveau code. Consultez Alternatives modernes pour savoir quoi utiliser à la place.

Cette page couvre ce que faisait each(), sa syntaxe et la forme de sa valeur de retour, le comportement du pointeur interne qui la rendait délicate, et comment réécrire chaque usage avec foreach.

Syntaxe

La syntaxe de la fonction each() est la suivante :

Syntaxe de la fonction Each() en PHP

each(array $array): array|false

La fonction each() prend un array en paramètre et renvoie un array ou false en cas d'échec.

Paramètres

ParamètreTypeDescription
$arrayarray (par référence)Le tableau à lire et à avancer. Fonctionne avec les arrays indexés et associatifs.

Le tableau est passé par référence car each() le mute — en particulier, elle avance le pointeur interne du tableau à chaque appel.

Valeur de retour

À chaque appel, each() renvoie un array de quatre éléments, avec des clés numériques et des clés string pointant vers les mêmes données :

IndexContient
0la clé courante
keyla même valeur que 0
1la valeur courante
valuela même valeur que 1

Lorsque le pointeur a dépassé le dernier élément, each() renvoie false — ce qui arrête la boucle while classique.

Utilisation

L'idiome classique associait each() à une boucle while. Chaque itération récupérait une paire et avançait le pointeur ; lorsqu'il n'y avait plus de paires, each() renvoyait false et la boucle se terminait.

Boucle each() historique (PHP 7.x et antérieur)

<?php
// Legacy PHP 7.x example. This will throw a fatal Error in PHP 8.0+.
$array = ["one" => 1, "two" => 2, "three" => 3];

while ($element = each($array)) {
    echo $element['key'] . ' => ' . $element['value'] . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3

On définit un array associatif, puis on appelle each() de manière répétée dans un while. Chaque appel renvoie la paire courante (accessible via $element['key'] / $element['value']) et avance le pointeur, jusqu'à ce que each() renvoie finalement false.

Le piège du pointeur interne

Étant donné que each() consomme le pointeur interne, un array ne peut être parcouru complètement qu'une seule fois. Pour boucler une deuxième fois, il fallait appeler reset() au préalable pour ramener le pointeur au début. Oublier cela était une source fréquente de bugs du type « ma boucle ne fait rien » — et c'est l'une des raisons pour lesquelles each() a finalement été supprimée au profit de foreach, qui utilise son propre itérateur et ne perturbe jamais le tableau.

Équivalent moderne PHP 8+

Tout le motif while (each()) se résume à un unique foreach, plus clair :

<?php
$array = ["one" => 1, "two" => 2, "three" => 3];

foreach ($array as $key => $value) {
    echo $key . ' => ' . $value . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3

foreach est plus court, ne touche pas au pointeur interne (le tableau reste donc réutilisable), et c'est la seule des deux approches qui fonctionne en PHP 8+.

each() vs. fonctions d'array similaires

each() est souvent regroupée avec d'autres outils d'itération, mais chacun fait quelque chose de distinct :

FonctionCe qu'elle faitRenvoie une paire clé/valeur ?Touche le pointeur interne ?
foreachConstruction du langage pour boucler sur chaque élémentOui (as $key => $value)Non
array_walk()Applique un callback à chaque élément, en placeNonNon
array_map()Construit un nouvel array à partir des résultats d'un callbackNonNon
current() / next() / key()Lit l'élément au pointeur / l'avance / lit sa cléPartiellement (séparément)Oui (next())

Si vous avez besoin du contrôle manuel du pointeur qu'offrait autrefois each(), combinez current(), key(), next() et reset() — ces fonctions sont toujours disponibles en PHP 8+.

Statut historique et alternatives modernes

La fonction each() est dépréciée (PHP 7.2) et supprimée (PHP 8.0). Pour tout nouveau code :

Conclusion

each() était autrefois la méthode de référence pour parcourir un array et récupérer des paires clé-valeur, mais sa dépendance au pointeur interne la rendait sujette aux erreurs, et PHP 8.0 l'a complètement supprimée. Considérez-la comme de l'histoire en lecture seule : reconnaissez-la dans le code ancien, puis remplacez-la par foreach — qui est plus sûre, plus rapide et constitue le standard moderne.

Pratique

Pratique
Quelles affirmations concernant la fonction each() en PHP sont correctes ?
Quelles affirmations concernant la fonction each() en PHP sont correctes ?
Was this page helpful?