reset()
Aprende cómo usar la función reset() de PHP para mover el puntero interno de un array al primer elemento y cuándo es necesario utilizarla.
Cada array de PHP mantiene un puntero interno oculto que marca el elemento "actual". Funciones como current(), key(), next() y prev() leen y mueven este puntero. Después de recorrer un array, el puntero queda al final (o en algún punto intermedio) y la siguiente lectura devuelve el elemento incorrecto. La función reset() rebobina ese puntero hasta el primer elemento para que puedas empezar de nuevo.
Este artículo explica cómo funciona el puntero interno, qué devuelve reset(), cuáles son los errores más comunes y cómo encaja con las demás funciones de puntero de array.
¿Qué es reset()?
reset() es una función integrada de PHP que mueve el puntero interno de un array al primer elemento y devuelve el valor de ese elemento. Es el equivalente opuesto de end(), que mueve el puntero al último elemento.
Es importante destacar que reset() muta el puntero del array — por eso su firma recibe el array por referencia (&$array). Se pasa una variable, no un literal, y reset() cambia el estado del puntero de esa variable en el lugar.
Sintaxis
reset(array &$array): mixedParámetros
| Parámetro | Descripción |
|---|---|
$array | El array cuyo puntero interno se desea rebobinar. Se pasa por referencia, por lo que debe ser una variable (no se puede pasar un literal de array en línea). |
Valor de retorno
reset() devuelve el valor del primer elemento del array, o false si el array está vacío.
Una trampa sutil: como un array vacío devuelve false, no se puede distinguir de forma fiable "array vacío" de "el primer elemento es literalmente false" comprobando únicamente el valor de retorno. Si necesitas esa distinción, comprueba el array con empty() o count() primero.
Ejemplos
Veamos cómo se comporta reset() con distintos tipos de arrays.
Ejemplo 1: Reiniciar el puntero de un array numérico
Ejemplo de reinicio del puntero de un array numérico en PHP
En este ejemplo, tenemos un array de colores. Llamamos a la función reset() para reiniciar el puntero al inicio del array. Luego llamamos a current() para obtener el primer elemento, que es 'red'.
Ejemplo 2: Reiniciar el puntero de un array asociativo
Ejemplo de reinicio del puntero de un array asociativo en PHP
En este ejemplo, tenemos un array asociativo con los datos de una persona. Llamamos a la función reset() para reiniciar el puntero al inicio del array. Luego llamamos a key() y current() para obtener el par clave-valor del primer elemento.
Ejemplo 3: Por qué reset() es importante después de iterar
Este es el motivo más común en el mundo real para llamar a reset(). Las funciones que mueven el puntero (next(), end(), un bucle while manual) lo dejan detenido. Sin reset(), la siguiente lectura continúa desde donde se quedó:
<?php
$colors = ['red', 'green', 'blue'];
// Advance the pointer to the end
end($colors); // pointer now at 'blue'
echo current($colors); // outputs 'blue'
echo "\n";
// Rewind it
reset($colors);
echo current($colors); // outputs 'red'reset() también devuelve el primer valor, así que puedes capturarlo directamente: $first = reset($colors); da 'red'.
reset() vs. foreach
Un punto de confusión frecuente: un bucle foreach no usa el puntero interno del array. PHP itera sobre una copia interna, por lo que el puntero no se modifica y no es necesario llamar a reset() después de un foreach:
<?php
$colors = ['red', 'green', 'blue'];
foreach ($colors as $color) {
// ... do something
}
// Pointer was never moved by foreach
echo current($colors); // outputs 'red'Solo necesitas reset() cuando tú (o una función que llamas) avanzas el puntero con las funciones basadas en puntero. Consulta foreach para entender cómo funciona realmente el bucle.
Errores comunes
- Pasa una variable, no un literal. Como el argumento es por referencia,
reset(['a', 'b'])genera un error en versiones modernas de PHP. Asigna el array a una variable primero. reset()muta el estado. Si otra parte de tu código depende de la posición actual del puntero, llamar areset()lo cambiará silenciosamente. Pasa una copia si debes preservar el puntero original.falsees ambiguo. Un retorno defalsepuede significar "array vacío" o "el primer valor esfalse". Usaempty($array)cuando sea relevante.
Funciones relacionadas
| Función | Mueve el puntero a | Devuelve |
|---|---|---|
reset() | Primer elemento | Primer valor (o false) |
end() | Último elemento | Último valor (o false) |
next() | Elemento siguiente | Valor siguiente (o false) |
prev() | Elemento anterior | Valor anterior (o false) |
current() | (sin movimiento) | Valor actual |
key() | (sin movimiento) | Clave actual |
Conclusión
reset() rebobina el puntero interno de un array al primer elemento y devuelve el valor de ese elemento. Úsalo siempre que una operación anterior (next(), end() o un bucle manual de puntero) haya dejado el puntero en una posición distinta al inicio y necesites empezar a leer desde el principio. Recuerda que foreach no toca el puntero, que el argumento debe ser una variable y que un retorno de false es ambiguo para arrays vacíos.