W3docs

foreach

El bucle foreach en PHP itera sobre arrays y objetos de forma sencilla. Aprende su sintaxis, referencia y uso de list().

El bucle foreach en PHP

foreach es el bucle dedicado de PHP para iterar sobre arrays y objetos. A diferencia de un bucle for, no necesita un contador ni un índice — recorre cada elemento automáticamente, uno a la vez, lo que lo convierte en la forma más común y menos propensa a errores para procesar una colección en PHP.

Este capítulo cubre las dos formas de foreach, la iteración por referencia, el desempaquetado de arrays anidados con list(), el error más común, y cuándo elegir foreach sobre los demás bucles de PHP.

Sintaxis

foreach tiene dos formas.

Solo valor — cuando solo te importa el valor de cada elemento:

foreach ($array as $value) {
  // do something with $value
}

Clave y valor — cuando también necesitas la clave del array (esencial para los arrays asociativos):

foreach ($array as $key => $value) {
  // do something with $key and $value
}

En cada pasada, PHP copia el elemento actual en $value (y su clave en $key), luego avanza al siguiente elemento hasta que el array se agota.

Iteración sobre un array indexado

php— editable, runs on the server

Iteración sobre un array asociativo

Con la forma $key => $value obtienes ambas mitades de cada par:

<?php

$person = ["name" => "John", "age" => 30, "city" => "New York"];

foreach ($person as $key => $value) {
  echo $key . ": " . $value . PHP_EOL;
}

// Output:
// name: John
// age: 30
// city: New York

Modificar valores por referencia

Por defecto, $value es una copia, por lo que modificarla dentro del bucle no afecta al array original. Antepón & para iterar por referencia y que los cambios se escriban de vuelta:

<?php

$prices = [10, 20, 30];

foreach ($prices as &$price) {
  $price *= 2;          // modifies the array in place
}
unset($price);          // important: break the reference

print_r($prices);

// Output:
// Array
// (
//     [0] => 20
//     [1] => 40
//     [2] => 60
// )

Precaución: siempre usa unset($price) después de un bucle por referencia. La variable sigue apuntando al último elemento, por lo que una asignación posterior a $price — o un segundo foreach que reutilice el nombre — corrompería silenciosamente el array.

Desempaquetar arrays anidados con list()

Cuando cada elemento es a su vez un array, puedes desestructurarlo en línea usando list() (o la sintaxis corta [] en PHP 7.1+):

<?php

$points = [[1, 2], [3, 4], [5, 6]];

foreach ($points as [$x, $y]) {
  echo "x=$x, y=$y" . PHP_EOL;
}

// Output:
// x=1, y=2
// x=3, y=4
// x=5, y=6

Cuándo usar foreach

  • Usa foreach para cualquier array o iterable cuando quieras recorrer todos los elementos — es la opción más clara y no puede salirse del límite del array.
  • Usa un bucle for cuando necesites control preciso sobre el contador (saltar elementos, avanzar de 2 en 2, contar hacia atrás).
  • Usa while cuando el número de iteraciones no se conoce de antemano y depende de una condición.

También puedes salir de un foreach antes de tiempo con break o saltar una iteración con continue, exactamente igual que en otros bucles.

Práctica

Práctica
¿Cuál es el propósito principal del bucle foreach en PHP según https://www.w3docs.com/learn-php/foreach.html?
¿Cuál es el propósito principal del bucle foreach en PHP según https://www.w3docs.com/learn-php/foreach.html?
Was this page helpful?