Con la función PHP foreach() podemos recorrer los diferentes tipos de arrays y objetos de una manera controlada. Vamos a ver en este post varios ejemplos y sintaxis de esta estructura de control de PHP.
Quizás os parezcan interesantes estas otras funciones para manejar arrays: PHP count(), PHP array_push() o las funciones sort(), asort y ksort() para ordenar arrays.
Unas funciones con funcionamiento similar son:
- PHP for
- jQuery each(): Mismo funcionamiento que foreach() pero en jQuery.
Sintaxis PHP foreach()
Vamos a ver las 2 opciones de sintaxis que tiene esta función según su web oficial:
1 2 3 4 |
foreach (expresion as $value) { //acciones } |
En esta primera sintaxis el bucle asigna a la variable $value el valor del elemento actual que está recorriendo en ese momento, en la siguiente iteración devolverá el siguiente valor.
Voy con el segundo tipo de sintaxis:
1 2 3 4 |
foreach (expresion as clave=>$value) { //acciones } |
Esta vez el bucle el valor se asocia a una clave (nombre de campo), podemos llamarlo ‘array asociativo‘.
En ambos casos el bucle siempre comienza por el primer elemento del array u objeto y finalizará al terminar de procesar el último elemento.
Ejemplo de PHP foreach con los arrays $_POST y $_GET
Vamos a ver en este primer ejemplo de PHP foreach la manera de recorrer los valores de los arrays de formularios $_POST y $_GET.
1 2 3 4 5 |
<form name="formulario" action="013-php-foreach-post-get.php" method="POST"> Introduce tu nombre: <input type="text" name="nombre"> Introduce la edad <input type="text" name="edad"> <input type="submit" value="Enviar"> </form> |
En las líneas superiores os he puesto el código del formulario con método POST con sus 2 campos de tipo text que voy a usar en el ejemplo. Ahora os pongo el código PHP:
1 2 3 4 5 6 7 |
if($_POST) { foreach ($_POST as $clave=>$valor) { echo "El valor de $clave es: $valor"; } } |
Explico el código superior:
- Primero pregunto si el array $_POST tiene valores o está vacío.
- En caso de tener valores, recorro todos los valores y asigno a la variable ‘clave’ el valor enviado.
- En la variable $clave se guarda el nombre del input, y en la variable $valor el valor del campo enviado.
Ahora os pongo el código para recoger los valores del mismo formulario pero con método GET:
1 2 3 4 5 6 7 |
if($_GET) { foreach ($_GET as $clave=>$valor) { echo "El valor de $clave es: $valor"; } } |
En cuanto al código de arriba no hay nada nuevo que explicar salvo que el contenido lo cogemos del array $_GET.
Ejemplo de PHP foreach() para recorrer arrays
Os voy a poner el ejemplo que puse en el post ‘PHP array(): Tipos y ejemplos para recorrer arrays‘, su funcionamiento es muy parecido al ejemplo anterior.
1 2 3 4 5 6 |
$equipo = array(portero=>'Cech', defensa=>'Terry', medio=>'Lampard', delantero=>'Torres'); foreach($equipo as $posicion=>$jugador) { echo "El " . $posicion . " es " . $jugador; } |
Podemos ver el código superior funcionado en el ejemplo para recorrer un array asociativo del post anteriormente mencionado. La misma explicación que puse en los ejemplos de $_POST y $_GET vale para comprender este ejemplo.
Ejemplo de PHP foreach() para recorrer, leer y parsear un XML
Vamos a ver cómo se puede leer un xml con la función PHP foreach(), imaginemos que el XML tiene esta estructura:
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version='1.0' encoding='UTF-8'?> <colores> <color> <nombre>Negro</nombre> <codigo_hexadecimal>000000</codigo_hexadecimal> </color> <color> <nombre>Blanco</nombre> <codigo_hexadecimal>ffffff</codigo_hexadecimal> </color> </colores> |
El XML contiene información de 2 colores y sus códigos hexadecimales, el código PHP necesario para leer dicha información sería el siguiente:
1 2 3 4 5 6 |
$xml = simplexml_load_file("NOMBREXML.xml"); foreach ($xml->color as $color) { echo "El color " . $color->nombre ." tiene el código hexadecimal " . $color->codigo_hexadecimal ." <br>"; } |
Podéis ver en esta URL el ejemplo de PHP foreach() para leer un XML en funcionamiento.
Explico el código:
- En la variable $xml guardo la estructura del XML a través de la función PHP simplexml_load_file().
- Después recorro el XML y voy guardando en la variable $color los tags de cada color.
- Por último saco los valores de cada color.
Otras funciones para trabajar con arrays
Os recomiendo leer este otro post sobre funciones para trabajar con arrays en PHP.