next()
Apprenez comment next() avance le pointeur interne d'un tableau PHP, retourne l'élément suivant ou false en fin de tableau, et s'utilise avec reset(), current() et prev().
Introduction
Chaque tableau PHP possède un pointeur interne qui désigne un élément comme « courant ». Une petite famille de fonctions permet de déplacer ce pointeur sans écrire de boucle soi-même : reset(), current(), prev(), end() et next(). Cet article se concentre sur next() — ce qu'elle retourne, comment elle modifie le pointeur, et les cas particuliers qui piègent les développeurs.
Ce que fait la fonction next()
next() avance le pointeur interne du tableau d'une position et retourne la valeur de l'élément sur lequel il se positionne. Sa signature est :
next(array &$array): mixedQuelques points découlent de cette signature :
- Le tableau est passé par référence (
&$array).next()ne retourne pas un nouveau tableau — elle modifie le pointeur du tableau que vous lui passez. - Elle retourne la valeur de l'élément suivant, pas celui sous le pointeur. Si vous voulez lire l'élément courant sans le déplacer, utilisez
current(). - En fin de tableau, elle retourne
falseet laisse le pointeur positionné après le dernier élément. Appelernext()à nouveau continuera de retournerfalse.
Lorsqu'un script démarre, le pointeur est sur le premier élément, donc le tout premier appel à next() retourne déjà le deuxième élément — pas le premier. C'est la principale source de confusion « décalage d'un » avec next().
Exemple de base
<?php
$fruits = ['apple', 'banana', 'cherry'];
echo current($fruits) . "\n"; // pointer starts on the first element
echo next($fruits) . "\n"; // move forward, return the second
echo next($fruits) . "\n"; // move forward, return the third
var_dump(next($fruits)); // past the end -> falseCe code affiche :
apple
banana
cherry
bool(false)current() lit le premier élément sans déplacer le pointeur, puis chaque next() avance d'un élément. Le dernier appel dépasse la fin du tableau et retourne false.
Parcourir un tableau avec next()
Un schéma courant consiste à commencer par reset() (pour s'assurer que le pointeur est au début) et à boucler avec next() jusqu'à ce qu'il retourne false :
<?php
$colors = ['red', 'green', 'blue'];
reset($colors);
echo current($colors) . "\n"; // first element
while (($color = next($colors)) !== false) {
echo $color . "\n";
}Résultat :
red
green
blueNotez le !== false (comparaison stricte). C'est important — voir la section suivante.
Le piège des « valeurs fausses »
next() retourne false en fin de tableau, mais elle retourne également false si la valeur réelle d'un élément est false, 0, "" ou null. Une vérification non stricte comme while (next($array)) s'arrêtera prématurément dès qu'elle rencontrera l'une de ces valeurs :
<?php
$data = ['a', 0, 'b'];
reset($data);
// WRONG: stops at the 0, never reaches 'b'
while ($value = next($data)) {
echo $value . "\n";
}
echo "---\n";Ce code n'affiche que :
---La boucle se termine immédiatement car next() retourne 0 (le deuxième élément), qui est une valeur fausse. Pour les tableaux susceptibles de contenir des valeurs fausses, préférez foreach, qui contourne entièrement le pointeur interne, ou utilisez key() pour détecter la vraie fin :
<?php
$data = ['a', 0, 'b'];
reset($data);
do {
echo current($data) . "\n";
} while (next($data) !== null && key($data) !== null);En pratique, un foreach simple est le bon outil pour itérer sur chaque élément ; recourez à next() uniquement lorsque vous avez réellement besoin d'un contrôle manuel et pas à pas du pointeur.
next() et les fonctions liées au pointeur
| Fonction | Déplace le pointeur ? | Retourne |
|---|---|---|
current() | Non | L'élément sous le pointeur |
next() | D'un pas en avant | Nouvel élément courant (ou false en fin de tableau) |
prev() | D'un pas en arrière | Nouvel élément courant (ou false avant le début) |
reset() | Au premier | Premier élément |
end() | Au dernier | Dernier élément |
key() | Non | Clé de l'élément courant (ou null après la fin) |
Combiner next() et prev() permet d'anticiper et de revenir en arrière lors d'un unique parcours d'un tableau.
Conclusion
La fonction next() avance le pointeur interne d'un tableau d'un pas vers l'avant et retourne la valeur sur laquelle il se positionne, ou false une fois qu'il dépasse la fin. Parce qu'elle repose sur le pointeur interne et signale la fin avec false, elle s'utilise naturellement avec reset(), current() et prev() — mais attention aux tableaux contenant des valeurs fausses, où une condition de boucle non stricte s'arrêtera trop tôt. Pour une itération simple, préférez foreach ; utilisez next() lorsque vous avez besoin d'un contrôle explicite sur la position du pointeur.