Bucles en PHP
for, while, do-while y foreach — y cuándo recurrir a cada uno.
2 min de lectura
PHP tiene cuatro construcciones de bucle, y elegir la correcta depende principalmente de si estás contando, comprobando una condición o iterando sobre una colección.
for: cuando sabes cuántas veces repetir
<?php
for ($i = 0; $i < 5; $i++) {
echo "Iteration $i\n";
}Las tres partes — inicialización, condición, incremento — se ejecutan en ese orden: se establece $i una vez, se comprueba la condición antes de cada iteración, y el incremento se ejecuta después del cuerpo de cada iteración. for es la opción natural siempre que un bucle esté guiado por un contador.
while: repetir mientras se cumpla una condición
<?php
$attempts = 0;
while ($attempts < 3) {
echo "Attempt " . ($attempts + 1) . "\n";
$attempts++;
}La condición se comprueba antes de cada iteración, incluida la primera — si es falsa de inmediato, el cuerpo del bucle nunca se ejecuta.
do-while: garantiza al menos una ejecución
<?php
$input = "";
do {
$input = readInput();
} while ($input === "");do-while comprueba su condición después de que se ejecute el cuerpo, garantizando al menos una iteración sin importar el valor inicial de la condición — útil para algo como "seguir pidiendo hasta obtener una entrada válida", donde necesitas preguntar al menos una vez antes de tener algo que comprobar.
foreach: la forma estándar de recorrer un array
<?php
$fruits = ["apple", "banana", "cherry"];
foreach ($fruits as $fruit) {
echo "$fruit\n";
}
$user = ["name" => "Amara", "role" => "admin"];
foreach ($user as $key => $value) {
echo "$key: $value\n";
}foreach es, con diferencia, el bucle más común en el PHP del día a día — itera directamente sobre los valores de un array (o, con as $key => $value, sobre claves y valores a la vez) sin necesidad de gestionar tú mismo un contador de índice. Funciona igual tanto en arrays indexados como asociativos.
break y continue
<?php
foreach ($fruits as $fruit) {
if ($fruit === "banana") {
continue; // skip this iteration
}
if ($fruit === "cherry") {
break; // stop the loop entirely
}
echo $fruit;
}continue salta el resto de la iteración actual y pasa a la siguiente; break sale del bucle inmediatamente, omitiendo cualquier iteración restante. Ambos funcionan en todos los tipos de bucle cubiertos en esta lección.
Modificar un array mientras se itera por referencia
<?php
$numbers = [1, 2, 3];
foreach ($numbers as &$number) {
$number *= 2;
}
unset($number); // break the reference after the loop
print_r($numbers); // [2, 4, 6]&$number hace que $number sea una referencia a cada elemento del array en lugar de una copia, así que modificarlo dentro del bucle modifica el array original. Haz siempre unset() de la variable de referencia inmediatamente después de un foreach que use & — dejarla activa es una fuente conocida de errores sutiles si se reutiliza el mismo nombre de variable en un bucle posterior.
Pon a prueba lo que acabas de aprender
4 preguntas rápidas. Respóndelas todas correctamente para desbloquear la siguiente lección.
Puedes hacer el cuestionario sin una cuenta — iniciar sesión solo hace que tu resultado cuente para tu progreso.