
Compatibilidad PHP 4, PHP 5, PHP 7, PHP 8 +.
La construcción foreach proporciona una manera fácil de moverse entre los elementos de un arrays dígase matriz. Funciona solo con arrays y objetos. Usarla con una variable de un tipo de datos diferente o una variable no inicializada arroja un error.
Esta estructura la podemos encontrar en dos formas de sintaxis:
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
La primera fórmula pasa por la matriz foreach de acuerdo con la expresión que se le envía (array_expression). En cada ciclo, el lenguaje asigna el valor del elemento actual a la variable $value
y el puntero interno a la matriz avanza un paso, es decir, verá el siguiente elemento en el siguiente ciclo.
La segunda sintaxis permite una asignación adicional de asignar la clave del elemento actual a la variable $key
en cada ciclo. PHP permite la personalización de ciclos de objetos .
Muy importante tener en cuenta que en PHP 5, el puntero de la matriz se restablece automáticamente al primer elemento de la matriz cuando se inicia una instrucción foreach
, lo que significa que no es necesario llamar a la función reset()
antes de un bucle foreach.
El foreach en PHP 5, un ciclo depende del puntero interno de la matriz, cambiar este puntero dentro del ciclo produce resultados inesperados, pero en PHP 7 no depende foreach
del puntero interno de la matriz.
Para realizar modificaciones directamente a los elementos de la matriz dentro del bucle, la etiqueta se puede agregar al &
nombre de la variable, asignando así el valor a la variable por referencia.
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr ahora es array (2, 4, 6, 8) unset($value); // desreferenciar con el último elemento ?>
Advertencia: La relación de referencia permanece entre la variable $value
y el último elemento de la matriz incluso después de salir de un bucle foreach
, por lo que se recomienda cancelar esta relación utilizando la función unset()
; de lo contrario, enfrentará la situación que se muestra en el siguiente ejemplo.
Después de que se completa el foreach
primer ciclo, los elementos del array toman los valores (2, 4, 6, 8) y la relación entre la variable $value
y el último elemento de la matriz permanece intacta a menos que sea interrumpida por unset()
.
En el foreach segundo ciclo, el valor del elemento se actualizará $arr[3]
a los valores tomados de la matriz $arr
, y finalmente el valor del penúltimo elemento se copiará al último valor:
<?php $arr = array(1, 2, 3, 4); foreach ($arr as & $value) { $value = $value * 2; } foreach ($arr as $key => $value) { // $ arr [3] Se actualizará un valor de la variable $ arr echo "{$key} => {$value} "; print_r($arr); } // salida // 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 ) // 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 ) // 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) // 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 ) ?>
Antes de PHP 5.5, una referencia de variable $value
solo era posible si la matriz era referenciable, es decir, se le asignó una variable. El siguiente código solo funciona en la versión 5.5.0 del idioma:
<?php foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
Importante saber que el foreach no admite la capacidad de omitir mensajes de error utilizando el operador ‘ @
‘.
Es posible que haya notado que los dos códigos siguientes son prácticamente idénticos:
<?php $arr = array("one", "two", "three"); reset($arr); while (list(, $value) = each($arr)) { echo "Value: $value<br />\n"; } foreach ($arr as $value) { echo "Value: $value<br />\n"; } ?>
Los siguientes dos códigos también son idénticos:
<?php $arr = array("one", "two", "three"); reset($arr); while (list($key, $value) = each($arr)) { echo "Key: $key; Value: $value<br />\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n"; } ?>
Aquí hay más ejemplos para ilustrar cómo usar:
<? php // Solo valor $a = array(1, 2, 3, 17); foreach ($a as $v) { echo "Current value of \$a: $v.\n"; } // Valor con sintaxis para acceso manual a elementos de matriz con fines ilustrativos $a = array(1, 2, 3, 17); $i = 0; // Solo para fines de aclaración foreach ($a as $v) { echo "\$a[$i] => $v.\n"; $i++; } // clave y valor $a = array( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17); foreach ($a as $k => $v) { echo "\$a[$k] => $v.\n"; } // Matrices 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"; } } // Matrices dinámicas foreach (array(1, 2, 3, 4, 5) as $v) { echo "$v\n"; } ?>
Descomposición de matrices anidadas usando la función list ()
(PHP 5> = 5.5.0, PHP 7)
La versión 5.5 del lenguaje hizo posible navegar a través de una array de matrices y descomponer matrices anidadas en variables en el ciclo usando la función list()
como un valor en el ciclo, como el ejemplo siguiente:
<? php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { // La primera variable contiene el primer elemento de la matriz anidada, // La segunda variable contiene el segundo. echo "A: $a; B: $b\n"; } ?>
El código realizado anteriormente da el siguiente resultado:
A: 1 ; B: 2 A: 3 ; B: 4
Se pueden proporcionar menos elementos en la función list() que en la matriz anidada, y el lenguaje ignorará el resto de los valores en la matriz:
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a)) { // Tenga en cuenta que no hay una segunda variable echo "$a\n"; } ?>
El código anterior da como resultado lo siguiente: 1 y 3
Aparecerá una alerta si no hay suficientes elementos para completar una función list()
:
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b, $c)) { echo "A: $a; B: $b; C: $c\n"; } ?>
La salida del código anterior es la siguiente:
Aviso : Indefinido compensado : 2 en el ejemplo . php en la línea 7 A : 1 ; B : 2 ; C : Aviso : Indefinido compensado : 2 en el ejemplo . php en la línea 7 A : 3 ; B : 4 ; C :
Registro de cambios
Versión | Función |
---|---|
7.0.0 | foreach no utilice el puntero interno de la matriz. |
5.5.0 | Se puede indicar $value en expresiones, pero anteriormente solo se admitían variables. |
5.5.0 | Soporte para descomponer matrices anidadas usando list() . |
- Ajustes y Configuraciones del Lenguaje PHP
- Sintaxis del Lenguaje PHP
- Tipos de Datos que encontramos en PHP
- Las Variables en PHP
- Constantes en PHP
- Operadores en PHP
- Expresiones en PHP
- Estructuras de Control en PHP
- Características del if en PHP
- Características de else en PHP
- Características del elseif en PHP
- Características del while en PHP
- Características del do-while en PHP
- Características del for en PHP
- Características del foreach en PHP
- Características del break en PHP
- Características del switch php
- Características de continue en PHP
- Declare php Características
- Arrays php Características
- Tipos de Funciones String en PHP
- Addcslashes() en PHP Características
- Función chunk_split() PHP Características
- Función addslashes() PHP Características
- Función convert_uuencode() PHP Características
- Función chr() en PHP Características
- Función echo PHP Características