Foreach PHP: Explicación y ejemplos [Guía 2022]



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

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:

Ejemplo de recorrer un arreglo con la función foreach php

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:

Tabla generada con un bloque foreach PHP

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.

Modificar contenido del array dentro de ciclo foreach

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().

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *