Un bucle es una estructura que repite un bloque de código mientras se cumpla una condición o queden elementos por recorrer.
Imagina que tienes una tienda online con 5.000 productos y quieres bajar el precio de todos un 10%. No vas a escribir 5.000 líneas de código una por una.
Para eso existen los bucles (o estructuras iterativas): definimos una lógica una vez y la aplicamos a un conjunto de datos tantas veces como sea necesario.
En PHP tenemos tres herramientas principales. Vamos a ver cuándo usar cada una.
while: “mientras esto sea verdad…”
Es el bucle más primario. Ejecuta el código mientras la condición sea true.
$contador = 1;
while ($contador <= 5) {
echo "Vuelta número $contador \n";
$contador++; // Avanzamos el contador
}El peligro: el bucle infinito
Si te olvidas de poner $contador++, la condición $contador <= 5 siempre será verdadera. Tu script nunca terminará, tu servidor se quedará “colgado” consumiendo CPU y tendrás que matarlo. Ten mucho cuidado con las condiciones de salida.
¿Cuándo usar while?
Cuando no sabes cuántas veces tienes que repetir algo de antemano.
- Ejemplo: “Lee líneas de este archivo hasta llegar al final”.
- Ejemplo: “Intenta una operación un número limitado de veces mientras siga fallando”.
for: el contador de precisión
Es la navaja suiza clásica. Condensa la lógica del while en una sola línea.
Estructura: for (inicio; condición; actualización)
for ($i = 0; $i < 10; $i++) {
echo "El cuadrado de $i es " . ($i ** 2) . "\n";
}¿Cuándo usar for?
Cuando sabes exactamente cuántas veces quieres iterar o necesitas un contador numérico. Es ideal para matemáticas, secuencias o generar tablas HTML.
foreach: el rey de los arrays (y de PHP)
Aquí es donde PHP brilla. Mientras que en C o Java antiguo tenías que usar for para recorrer listas, en PHP usamos foreach. Es más limpio, más seguro y más fácil de leer.
foreach toma un conjunto de datos (un array o un objeto) y lo recorre elemento a elemento. No necesitas contadores.
Opción a: solo el valor
$frutas = ['Manzana', 'Pera', 'Plátano'];
foreach ($frutas as $fruta) {
echo "Tengo una $fruta \n";
}Opción b: clave y valor
A veces necesitas saber el índice o la clave del array (ej: el ID de un usuario).
$usuario = [
'nombre' => 'Luis',
'rol' => 'Admin',
'web' => 'luisllamas.es'
];
foreach ($usuario as $clave => $valor) {
echo "$clave: $valor \n";
}
// Salida:
// nombre: Luis
// rol: Admin...¿Cuándo usar foreach?
Usa foreach siempre que trabajes con arrays o colecciones de datos. Evita el error de salirse del rango, algo muy común con el for.
Profundidad técnica: modificar datos dentro del bucle
Por defecto, foreach trabaja con una copia del valor. Si cambias el valor dentro del bucle, el array original no cambia.
$precios = [10, 20, 30];
foreach ($precios as $precio) {
$precio = $precio * 2; // Solo modificamos la variable temporal
}
// $precios sigue siendo [10, 20, 30]Si quieres modificar el array original, necesitas usar referencias anteponiendo &:
foreach ($precios as &$precio) { // Ojo al &
$precio = $precio * 2;
}
// Ahora $precios es [20, 40, 60]
unset($precio); // ¡IMPORTANTE! Romper la referenciaCuando uses & (referencias), al terminar el bucle la variable $precio sigue “enganchada” al último elemento del array. Si la usas después por error, modificarás el array sin querer. Haz unset($variable) al terminar un bucle por referencia.
break y continue: controlando el tráfico
A veces no quieres terminar todo el bucle.
break: “Para el carro”. Rompe el bucle completamente y sale.continue: “Salta esta vuelta”. Deja de ejecutar la iteración actual y pasa a la siguiente.
$buscador = 'Pera';
$cesta = ['Manzana', 'Podrida', 'Pera', 'Uva'];
foreach ($cesta as $fruta) {
if ($fruta === 'Podrida') {
continue; // ¡Puaj! Saltamos esta y seguimos
}
if ($fruta === $buscador) {
echo "¡Encontrada!";
break; // Ya la tengo, dejo de buscar
}
}