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 uneErrorfatale. 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|falseLa fonction each() prend un array en paramètre et renvoie un array ou false en cas d'échec.
Paramètres
| Paramètre | Type | Description |
|---|---|---|
$array | array (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 :
| Index | Contient |
|---|---|
0 | la clé courante |
key | la même valeur que 0 |
1 | la valeur courante |
value | la 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 => 3On 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 => 3foreach 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 :
| Fonction | Ce qu'elle fait | Renvoie une paire clé/valeur ? | Touche le pointeur interne ? |
|---|---|---|---|
foreach | Construction du langage pour boucler sur chaque élément | Oui (as $key => $value) | Non |
array_walk() | Applique un callback à chaque élément, en place | Non | Non |
array_map() | Construit un nouvel array à partir des résultats d'un callback | Non | Non |
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 :
- Itérer sur un array ? Utilisez
foreach. - Transformer des valeurs en un nouvel array ? Utilisez
array_map(). - Modifier des éléments en place ? Utilisez
array_walk(). - Besoin d'un parcours manuel ? Utilisez
current()+next()+reset().
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.