W3docs

next()

Aprende cómo next() de PHP avanza el puntero interno de un array, devuelve el siguiente elemento o false al final, y se combina con reset(), current() y prev().

Introducción

Cada array en PHP mantiene un puntero interno que marca un elemento como "actual". Una pequeña familia de funciones mueve ese puntero sin necesidad de escribir un bucle: reset(), current(), prev(), end() y next(). Este artículo se centra en next() — qué devuelve, cómo cambia el puntero y los casos límite que suelen confundir.

Qué hace la función next()

next() avanza el puntero interno del array una posición y devuelve el valor del elemento en el que se detiene. La firma es:

next(array &$array): mixed

Algunas consecuencias de esa firma:

  • El array se pasa por referencia (&$array). next() no devuelve un nuevo array — muta el puntero del array que le pasas.
  • Devuelve el valor del elemento siguiente, no el actual. Si deseas el elemento bajo el puntero sin moverlo, usa current().
  • Al final del array devuelve false y deja el puntero estacionado más allá del último elemento. Llamar a next() de nuevo sigue devolviendo false.

Cuando un script comienza, el puntero apunta al primer elemento, por lo que el primer next() ya devuelve el segundo elemento, no el primero. Esta es la fuente más común de confusión de "desfase de uno" con next().

Ejemplo básico

<?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 -> false

Esto produce:

apple
banana
cherry
bool(false)

current() lee el primer elemento sin mover el puntero, luego cada next() avanza un elemento. La última llamada sale del final del array y devuelve false.

Recorrer un array con next()

Un patrón común es comenzar con reset() (para asegurarse de que el puntero está al inicio) y hacer un bucle con next() hasta que devuelva false:

<?php

$colors = ['red', 'green', 'blue'];

reset($colors);
echo current($colors) . "\n"; // first element

while (($color = next($colors)) !== false) {
    echo $color . "\n";
}

Salida:

red
green
blue

Observa el !== false (comparación estricta). Esto es importante — consulta la siguiente sección.

El problema de los "valores falsy"

next() devuelve false al final del array, pero también devuelve false si el valor real de un elemento es false, 0, "" o null. Una comprobación laxa como while (next($array)) se detendrá prematuramente en el momento en que encuentre uno de esos valores:

<?php

$data = ['a', 0, 'b'];
reset($data);

// WRONG: stops at the 0, never reaches 'b'
while ($value = next($data)) {
    echo $value . "\n";
}
echo "---\n";

Esto imprime únicamente:

---

El bucle termina de inmediato porque next() devuelve 0 (el segundo elemento), que es falsy. Para arrays que pueden contener valores falsy, es preferible usar foreach, que evita por completo el puntero interno, o usar key() para detectar el final real:

<?php

$data = ['a', 0, 'b'];
reset($data);

do {
    echo current($data) . "\n";
} while (next($data) !== null && key($data) !== null);

En la práctica, un simple foreach es la herramienta adecuada para iterar sobre cada elemento; recurre a next() solo cuando realmente necesites un control manual y paso a paso del puntero.

next() y las funciones relacionadas con el puntero

Función¿Mueve el puntero?Devuelve
current()NoElemento bajo el puntero
next()Avanza unoNuevo elemento actual (o false al final)
prev()Retrocede unoNuevo elemento actual (o false antes del inicio)
reset()Al primeroPrimer elemento
end()Al últimoÚltimo elemento
key()NoClave del elemento actual (o null más allá del final)

Combinar next() y prev() permite mirar hacia adelante y retroceder durante un único recorrido por un array.

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, o false cuando sale del final. Como depende del puntero interno y señala el final con false, se combina naturalmente con reset(), current() y prev() — pero cuidado con los arrays que contienen valores falsy, donde una condición de bucle laxa se detendrá demasiado pronto. Para una iteración sencilla, prefiere foreach; usa next() cuando necesites un control explícito sobre dónde se encuentra el puntero.

Práctica

Práctica
¿Qué hace la función 'next()' de PHP según la información proporcionada?
¿Qué hace la función 'next()' de PHP según la información proporcionada?
Was this page helpful?