W3docs

each()

PHP each() devolvía el par clave-valor actual y avanzaba el puntero del array. Obsoleta en 7.2, eliminada en 8.0. Aprende su comportamiento y alternativas con foreach.

Introducción

La función each() se usaba históricamente para recorrer un array elemento a elemento, devolviendo el par clave-valor actual y avanzando el puntero interno del array. Impulsaba un idioma de bucle while que fue común para iterar arrays antes de que foreach se convirtiera en el estándar.

Importante: each() fue obsoleta en PHP 7.2 y eliminada completamente en PHP 8.0. Llamarla en PHP 8+ lanza un Error fatal. Esta página documenta su comportamiento heredado para que puedas leer y migrar código antiguo — pero nunca deberías escribir código nuevo con ella. Ve a Alternativas modernas para saber qué usar en su lugar.

Esta página cubre qué hacía each(), su sintaxis y forma de retorno, el comportamiento del puntero interno que la hacía complicada, y cómo reescribir cada uso con foreach.

Sintaxis

La sintaxis de la función each() es la siguiente:

Sintaxis de la función Each() en PHP

each(array $array): array|false

La función each() toma un array como parámetro y devuelve un array o false en caso de fallo.

Parámetros

ParámetroTipoDescripción
$arrayarray (por referencia)El array del que leer y avanzar. Funciona tanto con arrays indexados como asociativos.

El array se pasa por referencia porque each() lo muta — específicamente, mueve el puntero interno del array hacia adelante en cada llamada.

Valor de retorno

En cada llamada, each() devuelve un array de cuatro elementos, con claves numéricas y de cadena apuntando a los mismos datos:

ÍndiceContiene
0la clave actual
keyel mismo valor que 0
1el valor actual
valueel mismo valor que 1

Cuando el puntero ha avanzado más allá del último elemento, each() devuelve false — que es lo que detiene el clásico bucle while.

Uso

El idioma clásico combinaba each() con un bucle while. Cada iteración tomaba un par y avanzaba el puntero; cuando no quedaban pares, each() devolvía false y el bucle terminaba.

Bucle each() heredado (PHP 7.x y anteriores)

<?php
// Legacy PHP 7.x example. This will throw a fatal Error in PHP 8.0+.
$array = ["one" => 1, "two" => 2, "three" => 3];

while ($element = each($array)) {
    echo $element['key'] . ' => ' . $element['value'] . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3

Definimos un array asociativo y luego llamamos a each() repetidamente dentro de un while. Cada llamada devuelve el par actual (accesible como $element['key'] / $element['value']) y avanza el puntero, hasta que each() finalmente devuelve false.

El problema del puntero interno

Dado que each() consume el puntero interno, un array solo es completamente recorrible una vez. Para iterar una segunda vez había que llamar primero a reset() para rebobinar el puntero al inicio. Olvidar esto era una fuente frecuente de errores del tipo "mi bucle no hace nada" — y es una de las razones por las que each() fue finalmente eliminada en favor de foreach, que usa su propio iterador y nunca perturba el array.

Equivalente moderno en PHP 8+

Todo el patrón while (each()) se reduce a un único foreach más claro:

<?php
$array = ["one" => 1, "two" => 2, "three" => 3];

foreach ($array as $key => $value) {
    echo $key . ' => ' . $value . "\n";
}
// Output:
// one => 1
// two => 2
// three => 3

foreach es más corto, no toca el puntero interno (por lo que el array sigue siendo reutilizable), y es el único de los dos que funciona en PHP 8+.

each() vs. funciones de array similares

each() se agrupa a menudo con otras herramientas de iteración, pero cada una hace algo distinto:

FunciónQué hace¿Devuelve un par clave/valor?¿Toca el puntero interno?
foreachConstrucción de lenguaje para recorrer cada elementoSí (as $key => $value)No
array_walk()Aplica un callback a cada elemento, en su lugarNoNo
array_map()Construye un nuevo array a partir de los resultados de un callbackNoNo
current() / next() / key()Lee el elemento en el puntero / lo avanza / lee su claveParcialmente (por separado)Sí (next())

Si necesitas el control manual del puntero que each() ofrecía, combina current(), key(), next() y reset() — esas funciones siguen disponibles en PHP 8+.

Estado heredado y alternativas modernas

La función each() está obsoleta (PHP 7.2) y eliminada (PHP 8.0). Para todo código nuevo:

Conclusión

each() fue en su momento la forma preferida de recorrer un array y obtener pares clave-valor, pero su dependencia del puntero interno la hacía propensa a errores, y PHP 8.0 la eliminó por completo. Trátala como historia de solo lectura: reconócela en código heredado y reemplázala con foreach — que es más seguro, más rápido y el estándar moderno.

Práctica

Práctica
¿Cuáles de las siguientes afirmaciones sobre la función each() en PHP son correctas?
¿Cuáles de las siguientes afirmaciones sobre la función each() en PHP son correctas?
Was this page helpful?