Utilizamos la instrucción Foreach en PHP para recorrer los elementos de un arreglo (o array). Otra forma de procesar un arreglo es con la función for()
, pero usamos la función foreach()
cuando necesitamos recorrer todos los elementos de un arreglo, ya que su sintaxis es más sencilla y permite trabajar de forma muy amigable con arrays asociativos.
Estos son los temas que vamos a ver:
- Sintaxis foreach PHP
- Usar la sentencia foreach para mostrar los datos en una tabla.
- Modificar valores de un arreglo con foreach
- Conclusiones
Sintaxis foreach PHP
Podemos usar la función foreach de 2 formas, esta es la sintaxis de la primera forma:
foreach (variable_array as $valor)
sentencias ...
Aquí recorremos todos los elementos de un array y en cada ciclo va colocando el valor que lee del arreglo en la variable $valor
. Veamos un ejemplo:
<?php
$frutas = ['Mango', 'Fresa', 'Uva'];
foreach ($frutas as $valor) {
echo $valor;
}
?>
El arreglo está en la variable $frutas
y cuando lo recorremos con la función foreach, en el primer ciclo la variable $valor
tendrá el valor Mango
, en el segundo ciclo tendrá el valor fresa
.
Esta es la segunda sintaxis y es un poco más completa, se usa para recorrer arreglos asociativos. Por si no lo habías escuchado antes, un arreglo asociativo es un arreglo en donde le puedes dar un nombre a cada elemento del arreglo, se usan para poder acceder a cada elemento por un nombre, pero veamos ahora la sintaxis de foreach:
foreach (variable_array as $clave => $valor)
sentencias ...
Ahora tenemos un arreglo que se llama $comidas
, sus elementos son: cereal, pizza y ensalada y, ya que son asociativos, cada elemento tiene un nombre: desayuno, almuerzo y cena.
Con esta sintaxis podemos acceder al valor de cada arreglo en la variable $valor
y a su nombre por medio de la variable $llave
.
$comidas = [
'desayuno' => 'cereal',
'almuerzo' => 'pizza',
'cena' => 'ensalada'
];
foreach ($comidas as $llave => $valor) {
echo 'Para el ' . $llave . ', comere ' . $valor . '<br>';
}
Si ejecutamos el código anterior, la salida será igual a esta:
Nota: Puedes cambiar los nombres de las variables $llave
y $valor
por los nombres que desees.
Usar la sentencia foreach para mostrar los datos en una tabla.
Ahora veremos un ejemplo en el que siempre uso el bloque foreach, imagina que tienes una lista de productos (código y descripción) y deseas mostrarlos en una tabla HTML, en este caso el bloque foreach es tu mejor opción porque debes recorrer el array completo. El código podría ser algo como esto:
<!DOCTYPE html>
<html lang="es" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l"
crossorigin="anonymous">
<title></title>
</head>
<body>
<?php
// Array
$productos = [
['codigo' => 'A0001', 'desc' => 'Mouse'],
['codigo' => 'A0002', 'desc' => 'Teclado'],
['codigo' => 'A0003', 'desc' => 'Monitor'],
['codigo' => 'A0004', 'desc' => 'Impresor'],
];
//Abrir etiqueta de tabla
echo '<table class="table table-striped">';
//Imprimir encabezado de tabla
echo '<thead class="thead-dark">
<tr><th>Codigo</th><th>Descripcion</th></tr>
</thead>';
// Imprimir las filas de la tabla
foreach ($productos as $prod) {
echo '<tr>
<td>'. $prod['codigo'] .'</td>
<td>'. $prod['desc'] .'</td>
</tr>';
}
echo '</table>';
?>
</body>
</html>
Antes de recorrer el arreglo imprimimos el inicio de las etiquetas HTML para mostrar una tabla, y dentro del bloque foreach imprimimos cada elemento del arreglo y como he usado bootstrap en resultado final se visualiza de esta forma:
Modificar valores de un arreglo con foreach
Cuando recorremos un arreglo, accedemos a cada uno de sus elementos, pero en forma de solo lectura. Sin embargo, en ocasiones podemos necesitar modificar sus valores, para hacerlo podemos usar un truco y es anteponiendo un signo &
como prefijo al declarar la variable en nuestro ciclo foreach, aquí hay un ejemplo:
<!DOCTYPE html>
<html lang="es" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
$productos = [
['codigo' => 'A0001', 'desc' => 'Mouse'],
['codigo' => 'A0002', 'desc' => 'Teclado'],
['codigo' => 'A0003', 'desc' => 'Monitor'],
['codigo' => 'A0004', 'desc' => 'Impresor'],
];
foreach ($productos as &$prod) {
$prod['codigo'] = '2';
}
echo '<pre>';
var_dump($productos);
echo '</pre>';
?>
</body>
</html>
Solo nota que en el ciclo foreach declaro la variable como &$prod
en lugar solo $prod
. Al ejecutar el código verás que el contenido del array ha sido modificado, cuando cambiamos el contenido de la variable $prod
dentro del ciclo.
Conclusiones
Foreach en PHP es usado para recorrer en array de principio a fin, pero sí, en cambio, deseas recorrer solo algunos elementos, por ejemplo, los primeros 5, entonces es mejor utilizar el bloque for()
.