each

(PHP 4, PHP 5, PHP 7)

eachDevuelve cada par clave/valor de un array

Advertencia

Esta funcionalidad está OBSOLETA a partir de PHP 7.2.0 y ha sido ELIMINADA a partir de PHP 8.0.0.

Descripción

each(array|object &$array): array

each() devuelve el par clave/valor actual del array array y avanza el puntero del array.

Tras cada llamada a each(), el puntero del array se desplaza al siguiente elemento, o más allá del último elemento, cuando se llega al final. Debe utilizarse reset() si se desea recorrer el array nuevamente con each().

Parámetros

array

El array de entrada.

Valores devueltos

Devuelve el par clave/valor actual del array array y avanza el puntero del array. Este par se devuelve en un array de 4 elementos, con las claves 0, 1, key, y value. Los elementos 0 y key contienen el nombre de la clave y 1 y value contienen el valor.

Si el puntero interno del array está más allá del final del array, each() devuelve false.

Ejemplos

Ejemplo #1 Ejemplo con each()

<?php
$foo
= array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);
?>

$bar contiene ahora las claves/valores siguientes :

Array
(
    [1] => bob
    [value] => bob
    [0] => 0
    [key] => 0
)

<?php
$foo
= array("Robert" => "Bob", "Seppo" => "Sepi");
$bar = each($foo);
print_r($bar);
?>

$bar contiene ahora las claves/valores siguientes :

Array
(
    [1] => Bob
    [value] => Bob
    [0] => Robert
    [key] => Robert
)

each() se utiliza típicamente en conjunción con list() para revisar un array. Por ejemplo :

Ejemplo #2 Recorrer un array con each()

<?php
$fruit
= array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');

reset($fruit);
while (list(
$key, $val) = each($fruit)) {
echo
"$key => $val\n";
}
?>

El ejemplo anterior mostrará:

a => apple
b => banana
c => cranberry

Precaución

Asignar un array a otra variable reinicia el puntero del array original a cero. Debido a este comportamiento, se podría haber provocado una iteración infinita en nuestro ejemplo si se hubiera asignado $fruit a otra variable dentro de nuestro ciclo.

Advertencia

each() también acepta objetos, pero puede devolver un resultado no esperado. Por lo tanto, no se recomienda utilizar esta función con objetos.

Ver también

  • key() - Devuelve una clave de un array asociativo
  • list() - Asigna variables como si fueran un array
  • current() - Devuelve el elemento actual del array
  • reset() - Reinicia el puntero interno del array al principio
  • next() - Avance el puntero interno de un array
  • prev() - Retrocede el puntero actual del array
  • foreach
  • Iteración de objetos

add a note

User Contributed Notes 5 notes

up
20
janhsh
3 years ago
Following the obsolescence of the each() function, here is a way to correct your source codes: 

If you use each() in a while loop like this: 

   while (list($Key,$Value)=@each($Array)){
   ....
   }

you have to replace with

    foreach ($Array  as $Key => $Value){        
    ....
    }

In the same minds.

   while (list(,$Value)=@each($Array)){
   ....
   }

will become

    foreach ($Array  as $Value){        
    ....
    }
up
18
phpcoder at gmail dot com
6 years ago
each was deprecated because it exposed too much of the internal implementation details, blocking language development. ("We can't do X because it would break each().")

https://wiki.php.net/rfc/deprecations_php_7_2#each

If you want an array pointer, maintain it yourself. Probably a good idea anyway, because then it's visible in the code.
up
12
sjoerd-php at linuxonly dot nl
19 years ago
Use foreach instead of while, list and each. Foreach is:
- easier to read
- faster
- not influenced by the array pointer, so it does not need reset().

It works like this:
<?php
$arr = array('foo', 'bar');
foreach ($arr as $value) {
    echo "The value is $value.";
}

$arr = array('key' => 'value', 'foo' => 'bar');
foreach ($arr as $key => $value) {
    echo "Key: $key, value: $value";
}
?>
up
7
man13or at hotmail dot fr
6 years ago
Hello, since each() and list() often "betray" very old applications, I simply recommend not to use them anymore.

If you want to assign variables based on an associative array,
Replace this:

while(list ($key, $value) = each ($my_array)) {
    $$key = $value;
}

with this:

foreach ($my_array as $key => $value) {
    $$key = $value;
}
up
2
Henk Poley
6 years ago
Rector has an automated fix ('ListEachRector') to migrate away from `each()`:

https://github.com/rectorphp/rector/blob/master/docs/AllRectorsOverview.md#listeachrector

If you look at the code example you'll see this is even quite simple to do by hand.
To Top