Bucles en PHP: for, while, do while y foreach con ejemplos prácticos


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:

  • $clave recibe la clave;
  • $valor recibe 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;
  • foreach para recorrerlo;
  • una variable $subtotal;
  • un acumulador $total.

Errores comunes

  • crear un bucle infinito;
  • olvidar incrementar el contador en un while;
  • usar for cuando foreach sería más claro;
  • confundir break con continue;
  • 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 $producto en lugar de $x;
  • mantener simple la condición del bucle;
  • evitar trabajo innecesario dentro de cada iteración;
  • usar break cuando ya no sea necesario continuar;
  • preferir foreach para recorrer arrays.

Ejercicios

  1. mostrar los números del 1 al 20 con for;
  2. mostrar los números del 20 al 1;
  3. sumar los números del 1 al 100;
  4. mostrar una tabla de multiplicar;
  5. resolver los ejercicios anteriores utilizando while;
  6. crear un ejemplo donde do while se ejecute una sola vez;
  7. recorrer un array de nombres con foreach;
  8. recorrer un array asociativo mostrando clave y valor;
  9. buscar un número y detener el recorrido con break;
  10. mostrar únicamente números pares utilizando continue;
  11. crear una matriz 3 × 3 mediante bucles anidados;
  12. 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:

☕ Apoyar con Mercado Pago

🌎 Apoyar con PayPal


Descubre más desde Club Programador

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Deja un comentario

Descubre más desde Club Programador

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo