current()
Aprende cómo funciona current() en PHP, qué devuelve el puntero interno de un array y cuándo usarla frente a foreach.
Introducción
Todo array de PHP lleva un puntero interno — un cursor oculto que marca un elemento como el "actual". La función current() lee el valor en ese cursor sin moverlo. Esto convierte a current() en la mitad lectora del conjunto de herramientas de recorrido manual de arrays de PHP, la contraparte de las funciones de navegación next(), prev(), reset() y end().
Este capítulo explica exactamente qué es el puntero interno, cómo se comporta current() en los extremos de un array y las advertencias que conviene conocer antes de usarla.
¿Qué es la función current() en PHP?
current() devuelve el valor del elemento en el que se encuentra actualmente el puntero interno del array. No avanza el puntero, por lo que llamarla repetidamente devuelve el mismo valor hasta que otra función mueva el cursor.
Cuando se crea un array nuevo, el puntero comienza en el primer elemento. Las funciones que lo mueven son:
next()— avanza un elemento hacia adelante y devuelve ese valor.prev()— retrocede un elemento y devuelve ese valor.reset()— salta al primer elemento.end()— salta al último elemento.
current() es la única de estas que lee sin mover el puntero.
Sintaxis de la función current()
current(array $array): mixedAcepta un único argumento — el array a inspeccionar — y devuelve el valor en la posición actual del puntero, o false si el array está vacío o el puntero ha sobrepasado el último elemento.
Precaución: Como
current()devuelvefalseal final de un array, no puedes usarla para detectar el fin de un array que contenga legítimamente un valorfalse. Usakey(), que devuelvenullmás allá del final, cuando necesites una comprobación de fin de array fiable.
Ejemplo básico
El puntero comienza en el primer elemento, por lo que esto imprime apple. Llama a current() diez veces más y seguirás obteniendo apple — nada ha movido el cursor.
Mover el puntero con next() y prev()
current() resulta útil en combinación con las funciones de navegación. Cada una reposiciona el cursor, y current() (o el valor que devuelve la propia función) indica dónde has aterrizado.
<?php
$fruits = ['apple', 'banana', 'cherry'];
echo current($fruits) . "\n"; // apple (pointer at index 0)
next($fruits);
echo current($fruits) . "\n"; // banana (pointer at index 1)
next($fruits);
echo current($fruits) . "\n"; // cherry (pointer at index 2)
prev($fruits);
echo current($fruits) . "\n"; // banana (pointer back at index 1)
reset($fruits);
echo current($fruits) . "\n"; // apple (pointer reset to start)La salida es:
apple
banana
cherry
banana
appleQué ocurre al final del array
Si el puntero avanza más allá del último elemento, current() devuelve false:
<?php
$fruits = ['apple', 'banana', 'cherry'];
end($fruits); // pointer on the last element
echo current($fruits) . "\n"; // cherry
next($fruits); // step beyond the last element
var_dump(current($fruits)); // bool(false)Esto imprime:
cherry
bool(false)Por eso importa la precaución anterior: un false de current() puede significar "fuera del rango" o "el valor del elemento es realmente false."
current() y foreach
Una sorpresa habitual: foreach itera sobre un array sin usar ni mover su puntero interno. Por tanto, current() no se ve afectada por un bucle foreach y sigue reflejando lo que establecieron por última vez las funciones que mueven el puntero.
<?php
$fruits = ['apple', 'banana', 'cherry'];
foreach ($fruits as $fruit) {
// looping does not touch the internal pointer
}
echo current($fruits); // apple — still at the startEsto imprime apple, no false. Si quieres control manual sobre la posición, usa next()/current(); si simplemente quieres recorrer todos los elementos, usa foreach.
Cuándo usar current()
Recurre a current() cuando necesites un recorrido con estado a través de un array — uno en el que avances el cursor a lo largo de varias llamadas a funciones o iteraciones de bucle y necesites examinar el elemento activo. Casos típicos:
- Procesar un array tipo cola mientras combinas
next()yprev(). - Leer el primer elemento de forma económica:
current($array)devuelve el primer valor sin necesitar su clave. - Implementar un cursor personalizado sobre un conjunto de datos.
Para la iteración cotidiana, prefiere foreach — es más claro e inmune a las sorpresas del puntero.
Conclusión
current() lee el valor en el puntero interno de un array sin moverlo, lo que la convierte en la mitad lectora del conjunto de recorrido manual de PHP junto con next(), prev(), reset() y end(). Recuerda sus dos casos extremos: devuelve el mismo valor hasta que algo más mueva el cursor, y devuelve false más allá del final del array — así que usa key() cuando necesites detectar el final de forma fiable.