Muchas tareas de programación requieren repetir instrucciones: mostrar una lista, recorrer productos, sumar valores, buscar un dato o ejecutar una acción varias veces.
En PHP estas repeticiones se realizan mediante bucles. En esta guía vamos a aprender cómo funcionan for, while, do while y foreach, cuándo conviene usar cada uno y cómo controlar su ejecución.
¿Qué es un bucle?
Un bucle es una estructura que permite ejecutar un bloque de código varias veces.
Por ejemplo, si queremos mostrar los números del 1 al 5, podríamos escribir:
echo 1; echo 2; echo 3; echo 4; echo 5;
Pero eso es repetitivo. Un bucle permite expresar la misma idea de forma más compacta y flexible.
Dos formas comunes de repetir
Podemos pensar los bucles de dos maneras principales:
- por cantidad: repetir un número conocido de veces;
- por condición: repetir mientras algo siga siendo verdadero.
Por ejemplo:
- mostrar del 1 al 10 → cantidad conocida;
- seguir leyendo hasta encontrar un dato → depende de una condición.
El bucle for
for es ideal cuando sabemos cuántas veces queremos repetir algo.
for ($i = 1; $i <= 5; $i++) { echo $i; }
Este bucle muestra:
12345
Las tres partes del for
La estructura general es:
for (inicialización; condición; actualización) {
// instrucciones
}
En:
for ($i = 1; $i <= 5; $i++)
tenemos:
$i = 1: valor inicial;$i <= 5: condición para seguir;$i++: incremento después de cada vuelta.
¿Qué es una iteración?
Cada repetición completa del bucle se denomina iteración.
En un for del 1 al 5 hay cinco iteraciones.
Mostrar números del 1 al 10
for ($i = 1; $i <= 10; $i++) { echo $i . ' '; }
Contar hacia atrás
for ($i = 10; $i >= 1; $i--) { echo $i . ' '; }
En este caso utilizamos $i-- para disminuir el contador.
Tabla de multiplicar
$numero = 7; for ($i = 1; $i <= 10; $i++) { $resultado = $numero * $i; echo "$numero x $i = $resultado" . '
'; }
El contador cambia en cada iteración y permite calcular una fila diferente.
Contadores y acumuladores
Un contador normalmente aumenta o disminuye para controlar repeticiones.
$contador = 0; $contador++;
Un acumulador guarda un resultado que se va construyendo.
$suma = 0; for ($i = 1; $i <= 100; $i++) { $suma += $i; } echo $suma;
En cada vuelta sumamos el valor actual de $i al acumulador.
El bucle while
while repite un bloque mientras una condición sea verdadera.
$i = 1; while ($i <= 5) { echo $i; $i++; }
Antes de cada iteración, PHP evalúa la condición.
¿Cuándo conviene while?
while es útil cuando no sabemos exactamente cuántas repeticiones serán necesarias.
Por ejemplo:
- esperar hasta encontrar un valor;
- procesar datos mientras existan;
- repetir una operación hasta alcanzar una condición.
El peligro de un bucle infinito
Si la condición nunca se vuelve falsa, el bucle puede ejecutarse indefinidamente.
$i = 1; while ($i <= 5) { echo $i; }
Este ejemplo es incorrecto porque $i nunca cambia.
La versión correcta sería:
$i = 1; while ($i <= 5) { echo $i; $i++; }
do while
do while es parecido a while, pero garantiza que el bloque se ejecute al menos una vez.
$i = 1; do { echo $i; $i++; } while ($i <= 5);
Diferencia entre while y do while
Con while la condición se evalúa antes de ejecutar el bloque.
Con do while la condición se evalúa después.
while → evalúa → ejecuta do while → ejecuta → evalúa
Por eso do while siempre ejecuta al menos una iteración.
Ejemplo donde do while ejecuta una vez
$numero = 10; do { echo 'Se ejecutó una vez'; } while ($numero < 5);
Aunque la condición sea falsa desde el principio, el bloque se ejecuta una vez.
foreach
foreach está diseñado especialmente para recorrer arrays y estructuras iterables.
$nombres = ['Ana', 'Juan', 'Lucía']; foreach ($nombres as $nombre) { echo $nombre . '
'; }
En cada iteración, $nombre toma el valor de un elemento del array.
¿Qué significa as?
La palabra as indica qué variable utilizar para representar el elemento actual.
foreach ($nombres as $nombre)
Puede leerse como:
“por cada elemento de $nombres, guardalo temporalmente en $nombre”.
foreach con clave y valor
También podemos obtener la clave de cada elemento.
$persona = [
'nombre' => 'Ana',
'edad' => 25,
'ciudad' => 'Santa Rosa'
];
foreach ($persona as $clave => $valor) {
echo $clave . ': ' . $valor . '
';
}
En cada vuelta:
$claverecibe la clave;$valorrecibe el contenido.
Recorrer productos
$productos = [
['nombre' => 'Teclado', 'precio' => 25000],
['nombre' => 'Mouse', 'precio' => 15000],
['nombre' => 'Monitor', 'precio' => 180000]
];
foreach ($productos as $producto) {
echo $producto['nombre'] . ' - $' . $producto['precio'] . '
';
}
Este tipo de estructura es muy común al trabajar con resultados de bases de datos o APIs.
break
break permite finalizar un bucle antes de que termine normalmente.
for ($i = 1; $i <= 10; $i++) { if ($i === 5) { break; } echo $i . ' '; }
Resultado:
1 2 3 4
Buscar un valor con break
$numeros = [3, 8, 12, 20, 25]; $buscado = 12; foreach ($numeros as $numero) { if ($numero === $buscado) { echo 'Encontrado'; break; } }
Una vez encontrado el valor, no tiene sentido seguir recorriendo el array.
continue
continue salta la iteración actual y pasa a la siguiente.
for ($i = 1; $i <= 10; $i++) { if ($i === 5) { continue; } echo $i . ' '; }
Resultado:
1 2 3 4 6 7 8 9 10
Ejemplo: mostrar solo números pares
for ($i = 1; $i <= 20; $i++) { if ($i % 2 !== 0) { continue; } echo $i . ' '; }
Los números impares se saltan y solamente se muestran los pares.
Bucles anidados
Un bucle puede contener otro bucle.
for ($fila = 1; $fila <= 3; $fila++) { for ($columna = 1; $columna <= 3; $columna++) { echo "($fila,$columna) "; } echo '
'; }
Por cada iteración del bucle exterior, el bucle interior se ejecuta completo.
¿Cuántas veces se ejecuta un bucle anidado?
Si el bucle exterior se ejecuta 3 veces y el interior 4 veces, el bloque interior se ejecuta:
3 × 4 = 12 veces
Esto es importante porque los bucles anidados pueden aumentar rápidamente el trabajo realizado.
for, while, do while o foreach
Una guía rápida:
- for: cuando tenemos un contador o cantidad conocida;
- while: cuando repetimos mientras una condición sea verdadera;
- do while: cuando necesitamos ejecutar al menos una vez;
- foreach: cuando recorremos arrays u objetos iterables.
Ejemplo completo: total de una compra
$productos = [
['nombre' => 'Teclado', 'precio' => 25000, 'cantidad' => 2],
['nombre' => 'Mouse', 'precio' => 15000, 'cantidad' => 1],
['nombre' => 'Monitor', 'precio' => 180000, 'cantidad' => 1]
];
$total = 0;
foreach ($productos as $producto) {
$subtotal = $producto['precio'] * $producto['cantidad'];
$total += $subtotal;
echo $producto['nombre'] . ' - $' . $subtotal . '
';
}
echo 'Total: $' . $total;
En este ejemplo usamos:
- un array de productos;
foreachpara recorrerlo;- una variable
$subtotal; - un acumulador
$total.
Errores comunes
- crear un bucle infinito;
- olvidar incrementar el contador en un
while; - usar
forcuandoforeachsería más claro; - confundir
breakconcontinue; - modificar accidentalmente variables de control;
- crear demasiados niveles de bucles anidados;
- usar nombres poco descriptivos para los elementos recorridos.
Buenas prácticas
- usar nombres claros como
$productoen lugar de$x; - mantener simple la condición del bucle;
- evitar trabajo innecesario dentro de cada iteración;
- usar
breakcuando ya no sea necesario continuar; - preferir
foreachpara recorrer arrays.
Ejercicios
- mostrar los números del 1 al 20 con
for; - mostrar los números del 20 al 1;
- sumar los números del 1 al 100;
- mostrar una tabla de multiplicar;
- resolver los ejercicios anteriores utilizando
while; - crear un ejemplo donde
do whilese ejecute una sola vez; - recorrer un array de nombres con
foreach; - recorrer un array asociativo mostrando clave y valor;
- buscar un número y detener el recorrido con
break; - mostrar únicamente números pares utilizando
continue; - crear una matriz 3 × 3 mediante bucles anidados;
- calcular el total de un listado de productos.
Qué aprendimos
- qué es un bucle;
- qué es una iteración;
- cómo funciona
for; - contadores y acumuladores;
while;do while;foreach;- clave y valor;
break;continue;- bucles anidados;
- cuándo conviene cada estructura.
¿Qué sigue?
En la próxima guía profundizaremos en arrays en PHP: arrays indexados, asociativos, multidimensionales y las funciones más importantes para trabajar con ellos.
¿Te sirvió esta guía? ☕
Si este contenido te ayudó y querés apoyar a Club Programador, podés colaborar mediante:
Descubre más desde Club Programador
Suscríbete y recibe las últimas entradas en tu correo electrónico.