foreach
(PHP 4, PHP 5, PHP 7, PHP 8)
La estructura foreach proporciona una forma sencilla de
iterar sobre arrays y objetos Traversable.
foreach generará un error cuando se utilice con
una variable que contenga un tipo de dato diferente o con una variable no inicializada.
La primera forma recorre el iterable dado por
iterable_expression. En cada iteración, el valor del
elemento actual se asigna a $value.
La segunda forma asignará adicionalmente la clave del elemento actual a
la variable $key en cada iteración.
Tenga en cuenta que foreach no modifica el puntero interno del array,
que es utilizado por funciones como current()
y key().
Es posible
personalizar la iteración de objetos.
Ejemplo #1 Usos comunes de foreach
<?php
/* Ejemplo: solo valor */
$array = [1, 2, 3, 17];
foreach ($array as $value) {
echo "Elemento actual de \$array: $value.\n";
}
/* Ejemplo: clave y valor */
$array = [
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
];
foreach ($array as $key => $value) {
echo "Clave: $key => Valor: $value\n";
}
/* Ejemplo: arrays multidimensionales clave-valor */
$grid = [];
$grid[0][0] = "a";
$grid[0][1] = "b";
$grid[1][0] = "y";
$grid[1][1] = "z";
foreach ($grid as $y => $row) {
foreach ($row as $x => $value) {
echo "Valor en posición x=$x y y=$y: $value\n";
}
}
/* Ejemplo: arrays dinámicos */
foreach (range(1, 5) as $value) {
echo "$value\n";
}
?>
Nota:
foreach no admite la capacidad de
suprimir mensajes de error utilizando
@.
Desempaquetar arrays anidados
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
Es posible iterar sobre un array de arrays y desempaquetar el array anidado
en variables de bucle utilizando ya sea
destructuración de arrays
mediante [] o utilizando la estructura de lenguaje
list() como valor.
Nota:
Tenga en cuenta que
destructuración de arrays
mediante [] solo es posible a partir de PHP 7.1.0
Cuando se proporcionan menos variables que elementos en el array,
los elementos restantes serán ignorados.
De manera similar, los elementos pueden omitirse utilizando una coma:
Se generará un aviso si no hay suficientes elementos en el array para llenar
el list():
foreach y referencias
Es posible modificar directamente elementos de array dentro de un bucle precediendo
$value con &.
En ese caso el valor será asignado por
referencia.
Advertencia
La referencia a un $value del último elemento del array
permanece incluso después del bucle foreach. Se recomienda
destruir estas referencias utilizando unset().
De lo contrario, ocurrirá el siguiente comportamiento:
Ejemplo #2 Iterar los valores de un array constante por referencia
<?php
foreach ([1, 2, 3, 4] as &$value) {
$value = $value * 2;
}
?>