foreach
El constructor foreach proporciona un modo sencillo de
iterar sobre arrays. foreach funciona sólo sobre arrays
y objetos, y emitirá un error al intentar usarlo con una variable
de un tipo diferente de datos o una variable no inicializada. Existen dos
sintaxis:
$valor)
sentencias
]]>
La primera forma recorre el array dado por
expresión_array. En cada iteración, el valor
del elemento actual se asigna a $valor y
el puntero interno del array avanza una posición (así en la próxima
iteración se estará observando el siguiente elemento).
La segunda forma además asigna la clave del elemento actual a
la variable $clave en cada iteración.
También es posible
personalizar la iteración de objetos.
En PHP 5, cuando foreach inicia su ejecución, el
puntero interno del array se pone automáticamente en el primer elemento
del array. Esto significa que no es necesario llamar la función
reset antes de un bucle foreach.
Ya que foreach depende el puntero de array interno en PHP
5, cambiar éste dentro del bucle puede conducir a un comportamiento inesperado.
En PHP 7, foreach no utilizar el puntero interno
del array.
Para poder modificar directamente los elementos del array dentro de bucle, se ha de anteponer
& a $valor. En este caso el valor será asignado por
referencia.
]]>
Referenciar $valor sólo es posible si el array iterado puede ser
referenciado (es decir, si es una variable). El siguiente código no funcionará:
]]>
La referencia del $valor y el último elemento del array
permanecen aún después del bucle foreach. Se recomienda
destruirlos con unset.
foreach no soporta la capacidad de
suprimir mensajes de error usando '@'.
Se puede haber notado que las siguientes construcciones son funcionalmente
idénticas:
\n";
}
foreach ($array as $valor) {
echo "Valor: $valor \n";
}
?>
]]>
Las siguientes construcciones también son funcionalmente idénticas:
\n";
}
foreach ($array as $clave => $valor) {
echo "Clave: $clave; Valor: $valor \n";
}
?>
]]>
Algunos ejemplos más para demostrar su uso:
$v.\n";
$i++;
}
/* Ejemplo 3 de foreach: clave y valor */
$a = array(
"uno" => 1,
"dos" => 2,
"tres" => 3,
"diecisiete" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* Ejemplo 4 de foreach: arrays multidimensionales */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
/* Ejemplo 5 de foreach: arrays dinámicos */
foreach (array(1, 2, 3, 4, 5) as $v) {
echo "$v\n";
}
?>
]]>
Utilizando arrays anidados con list()
PHP 5.5 añade la posibilidad de recorrer un array de arrays y utilizar el
array interior en las variables del bucle proporcionando list
como el valor.
Por ejemplo:
]]>
&example.outputs;
Puedes proporcionar menos elementos a list de los que
hay en el array interior, en cuyo caso los elementos sobrantes del array serán
descartados:
]]>
&example.outputs;
Se generará un notice si no hay suficientes elementos en el array para completar
el list:
]]>
&example.outputs;