(PHP 4, PHP 5, PHP 7)
each — Devuelve cada par clave/valor de un array
Esta funcionalidad está OBSOLETA a partir de PHP 7.2.0 y ha sido ELIMINADA a partir de PHP 8.0.0.
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().
arrayEl array de entrada.
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 .
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
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.
each() también acepta objetos, pero puede devolver un resultado no esperado. Por lo tanto, no se recomienda utilizar esta función con objetos.
foreach 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){
....
}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.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";
}
?>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;
}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.