Bucles en PHP
Los bucles ejecutan un bloque de código repetidamente mientras se cumpla una condición. Son esenciales para procesar listas, generar contenido dinámico y automatizar tareas repetitivas.
while — repetir mientras se cumpla una condición
El bucle while evalúa la condición antes de cada iteración.
Si la condición es falsa desde el principio, el bloque nunca se ejecuta.
$contador = 1;
while ($contador <= 5) {
echo "Iteración: $contador <br>";
$contador++; // sin esto, bucle infinito
}
echo "Fin — contador llegó a: $contador";
Si la condición nunca se vuelve falsa, el script se cuelga. Siempre asegurate de que algo dentro del bucle modifique la variable que controla la condición — en el ejemplo, $contador++.
do / while — ejecutar al menos una vez
A diferencia del while, el do/while evalúa la condición
después de cada iteración. Esto garantiza que el bloque se ejecute
al menos una vez, aunque la condición sea falsa desde el principio.
$numero = 1;
do {
echo "Número: $numero <br>";
$numero++;
} while ($numero <= 5);
// Caso donde la condición es falsa desde el inicio:
// el bloque igual se ejecuta UNA vez
$x = 100;
do {
echo "Esto se muestra aunque x sea 100 <br>";
} while ($x < 10);
El caso clásico es cuando necesitás ejecutar algo al menos una vez y luego repetirlo si se cumple una condición — por ejemplo, mostrar un menú y pedir al usuario que elija, repitiendo hasta que elija una opción válida.
for — cuando sabés cuántas veces repetir
El for es ideal cuando conocés de antemano cuántas veces necesitás iterar.
Tiene tres partes separadas por punto y coma: inicialización, condición e incremento.
// for (inicio; condición; incremento)
for ($i = 1; $i <= 5; $i++) {
echo "Vuelta $i <br>";
}
// Contar al revés
for ($i = 5; $i >= 1; $i--) {
echo "$i... <br>";
}
echo "¡Ya!<br>";
// Saltar de a dos
for ($i = 0; $i <= 10; $i += 2) {
echo "$i ";
}
for con arrays
$frutas = ["manzana", "naranja", "uva", "pera"];
for ($i = 0; $i < count($frutas); $i++) {
echo $i . ": " . $frutas[$i] . "<br>";
}
Para recorrer arrays, foreach suele ser más claro porque no necesitás manejar el índice manualmente. Usá for cuando necesitás el índice por algún motivo — por ejemplo, comparar elementos vecinos o recorrer dos arrays a la vez.
foreach — recorrer arrays
foreach es la forma más natural de recorrer arrays en PHP.
En cada iteración, la variable que definís toma el valor del elemento actual.
No necesitás manejar índices ni condiciones — PHP lo hace solo.
// Array indexado — solo el valor
$colores = ["rojo", "verde", "azul"];
foreach ($colores as $color) {
echo $color . "<br>";
}
// Array indexado — con índice
foreach ($colores as $i => $color) {
echo "$i: $color <br>";
}
// Array asociativo — clave y valor
$persona = ["nombre" => "Ana", "edad" => 28, "ciudad" => "Córdoba"];
foreach ($persona as $clave => $valor) {
echo "$clave: $valor <br>";
}
// Array de arrays — el más usado en la práctica
$productos = [
["nombre" => "Laptop", "precio" => 1200],
["nombre" => "Mouse", "precio" => 25],
["nombre" => "Teclado", "precio" => 75],
];
foreach ($productos as $p) {
echo $p["nombre"] . ": $" . $p["precio"] . "<br>";
}
Probá el Ejemplo 3: foreach
break y continue
Dentro de cualquier bucle podés controlar el flujo con dos palabras clave:
// break — sale del bucle completamente
for ($i = 1; $i <= 10; $i++) {
if ($i === 5) {
break; // para en 5, no llega a 10
}
echo "$i ";
}
// imprime: 1 2 3 4
echo "<br>";
// continue — salta a la siguiente iteración
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 === 0) {
continue; // salta los pares
}
echo "$i ";
}
// imprime: 1 3 5 7 9
break
break;
Sale del bucle inmediatamente. El código después del bucle sigue ejecutándose.
continue
continue;
Salta el resto de la iteración actual y pasa a la siguiente.
Ejemplo Completo
Reporte de ventas usando bucles:
<?php
$ventas = [
["producto" => "Laptop", "cantidad" => 3, "precio" => 1200],
["producto" => "Mouse", "cantidad" => 15, "precio" => 25],
["producto" => "Teclado", "cantidad" => 8, "precio" => 75],
["producto" => "Monitor", "cantidad" => 5, "precio" => 450],
];
$total_general = 0;
echo "<strong>REPORTE DE VENTAS</strong><br><br>";
foreach ($ventas as $venta) {
$subtotal = $venta["cantidad"] * $venta["precio"];
$total_general += $subtotal;
echo $venta["producto"];
echo " — " . $venta["cantidad"] . " uds";
echo " x $" . $venta["precio"];
echo " = $" . number_format($subtotal, 2);
echo "<br>";
}
echo "<br>";
echo "<strong>TOTAL: $" . number_format($total_general, 2) . "</strong><br>";
// Encontrar el producto más vendido
$mas_vendido = $ventas[0];
foreach ($ventas as $venta) {
if ($venta["cantidad"] > $mas_vendido["cantidad"]) {
$mas_vendido = $venta;
}
}
echo "Más vendido: " . $mas_vendido["producto"];
echo " (" . $mas_vendido["cantidad"] . " unidades)";
?>
Probá el Ejemplo 4: Reporte de ventas
Buenas Prácticas
- foreach para arrays, for para rangos numéricos — cada uno tiene su lugar; no uses for donde foreach es más claro
- Siempre modificá la variable de control en while — si no, el bucle es infinito y el servidor se cuelga
- Evitá llamar count() en cada iteración del for — guardalo en una variable antes:
$n = count($arr); for ($i = 0; $i < $n; $i++) - break y continue con moderación — usados en exceso hacen el código difícil de seguir
- No modifiques el array mientras lo recorrés con foreach — puede dar resultados inesperados; trabajá con una copia si necesitás modificarlo