next()
Aprende cómo PHP next() avanza el puntero interno de un array, qué devuelve, el problema con valores falsy y cómo se combina con reset(), current() y prev().
La función next() de PHP
Todo array de PHP tiene un puntero interno que marca un elemento como el "actual". La función next() mueve ese puntero una posición hacia adelante y devuelve el valor en el que se detiene. Forma parte de una pequeña familia de funciones de puntero — reset(), current(), prev() y end() — que permiten recorrer un array paso a paso sin necesidad de escribir tu propio contador de índice. Esta guía explica exactamente qué devuelve next(), cómo modifica el puntero y los casos límite que suelen sorprender a los desarrolladores.
Sintaxis y valor de retorno
next(array &$array): mixedTres detalles se desprenden de esa firma:
- El array se pasa por referencia (
&$array).next()no te entrega un array nuevo — muta el puntero interno del array que le pasas. - Devuelve el valor del elemento siguiente, no el actual. Para leer el elemento bajo el puntero sin moverlo, usa
current(). - Al final del array devuelve
falsey deja el puntero más allá del último elemento. Cada llamada posterior también devuelvefalse.
Cuando un script accede por primera vez a un array, el puntero se sitúa en el primer elemento. Por lo tanto, el primer next() ya devuelve el segundo elemento — una fuente frecuente de errores de desplazamiento.
Un ejemplo básico de next()
El fragmento siguiente lee el primer elemento con current(), luego avanza dos veces. La última llamada sale del array y devuelve false:
La salida es:
apple
banana
cherry
bool(false)Recorrer un array con next()
Un patrón habitual es llamar primero a reset() (para asegurarse de que el puntero está al inicio), imprimir el primer elemento y luego hacer un bucle con next() hasta que devuelva false:
Esto imprime:
red
green
blueObserva la comparación estricta !== false — la siguiente sección explica por qué una comprobación laxa es peligrosa.
El problema con los valores falsy
next() devuelve false al final del array, pero también devuelve false cuando el valor real de un elemento es false, 0, "" o null. Una condición laxa como while (next($array)) se detiene en cuanto encuentra uno de esos valores:
Como next() devuelve 0 para el segundo elemento, el cuerpo del bucle nunca se ejecuta — la salida es simplemente:
donePara arrays que pueden contener valores falsy, es preferible usar foreach (que ignora el puntero interno por completo) o verificar key(), que devuelve null únicamente al final genuino del array.
Cómo se relaciona next() con las otras funciones de puntero
next() raramente trabaja sola. Se combina con reset(), current(), prev(), end() y key() para darte control manual completo sobre el cursor de un array:
| Función | ¿Mueve el puntero? | Devuelve |
|---|---|---|
current() | No | Elemento bajo el puntero |
next() | Avanza uno | Nuevo elemento actual (o false al final) |
prev() | Retrocede uno | Nuevo elemento actual (o false antes del inicio) |
reset() | Al primero | Primer elemento |
end() | Al último | Último elemento |
key() | No | Clave del elemento actual (o null al final) |
El ejemplo siguiente usa end() y prev() junto con next() para mostrar cómo el puntero puede moverse en ambas direcciones durante un mismo recorrido:
Salida:
30
20
30
10Cuándo usar next()
Para la iteración simple sobre todos los elementos, un bucle foreach es más claro y seguro — nunca falla con valores falsy. Recurre a next() solo cuando necesites un control explícito y paso a paso de dónde se encuentra el puntero, por ejemplo al inspeccionar el elemento siguiente mientras aún estás en mitad del bucle.
Conclusión
La función next() avanza el puntero interno de un array un paso hacia adelante y devuelve el valor en el que se detiene, retornando false una vez que supera el último elemento. Dado que depende del puntero interno y señala el final con false, funciona de la mano con reset(), current() y prev() — recuerda simplemente la trampa de los valores falsy, donde una condición de bucle laxa se detiene demasiado pronto. Para la iteración cotidiana prefiere foreach; elige next() cuando necesites un control preciso sobre el cursor del array.