1.3 · Bucles: for, while, foreach

Nivel 1 · Fundamentos del lenguaje

1.3Bucles: for, while, foreach

Objetivo: repetir tratamientos y recorrer colecciones con for, while y sobre todo foreach (el más usado), controlando el flujo con break/continue.
Tiempo estimado: 10 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • foreach = el bucle del día a día: foreach ($tab as $valeur) o as $cle => $valeur — recorrer sin gestionar un índice.
  • for = contador, while = condición: for cuando el número es conocido, while mientras una condición sea verdadera (y do...while al menos una vez).
  • break sale, continue salta: y todo bucle debe poder terminar — cuidado con los bucles infinitos.

Minicaso hilado — Riad muestra su catálogo en Constantine

Riad debe mostrar el catálogo de su sitio vitrina: una lista de prestaciones guardada en array. Primero escribe un bucle for con un índice manual — y muestra un elemento de más por un error de límite. Pasa a foreach: cada prestación se muestra sin gestionar un índice, con htmlspecialchars para escapar. Añade un break para detener la búsqueda en cuanto encuentra la prestación, y un contador for para numerar las páginas. El catálogo se muestra completo, sin desbordamiento.

Continuación del caso 1.1-1.2 — Riad pasa de las decisiones a la repetición.

1. for, while, do...while

Los bucles REPITEN un tratamiento. El for: cuando se conoce el número de repeticiones (o se itera con un contador) — for ($i = 0; $i < 10; $i++) { … }. El while: mientras una condición sea verdadera (número desconocido). El do...while: ejecuta al menos una vez (prueba al final). Vigilancia: un bucle infinito (condición que nunca se vuelve falsa, incremento olvidado) bloquea el script.

Riad numera sus páginas con un for acotado y verifica que su contador avanza: ningún bucle infinito bloqueará la visualización del catálogo.

2. foreach y break/continue

El bucle clave de PHP es el foreach: recorrer un array — foreach ($tab as $valeur) (cada valor) o foreach ($tab as $cle => $valeur) (pares clave → valor). Omnipresente: mostrar listas, tratar resultados de base. break sale del bucle inmediatamente; continue pasa a la siguiente iteración. En las plantillas: sintaxis alternativa foreach (…): … endforeach;.

Riad recorre sus prestaciones en foreach, escapa cada nombre con htmlspecialchars, y detiene la búsqueda con break en cuanto encuentra la prestación.

Error frecuente de interpretación: « for + índice vale para recorrer un array » o « mostrar en un bucle no necesita escape ». No. Iterar un array con for + índice reintroduce los errores de límites que foreach elimina: foreach es más simple y más seguro. Y todo dato mostrado en un bucle debe escaparse (htmlspecialchars) — un bucle que muestra diez nombres sin escapar, son diez fallos XSS en lugar de uno.
Los bucles foreach domina en PHP for Contador, número derepeticiones conocidowhile / do...while Mientras unacondición (número desconocido)foreach Recorrer un array(el más usado)
foreach domina en PHP
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Contar: Riad usa for para numerar las páginas (límites conocidos, incremento verificado). 2) Recorrer: muestra cada prestación en foreach, sin índice manual — acabado el elemento de más. 3) Controlar: break para detener la búsqueda, continue para ignorar, htmlspecialchars en cada visualización. Lección: foreach para las colecciones, for para los contadores, y todo bucle termina.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Recorrer una colección

El caso dominante en PHP, como Riad para su catálogo.

$produits = ['pomme', 'banane', 'cerise'];
foreach ($produits as $produit) {
    echo htmlspecialchars($produit) . ' ';
}
// asociativo:
foreach ($config as $cle => $valeur) {
    echo $cle . ' : ' . $valeur . ' ';
}

Lectura: cada elemento se trata sin gestionar un índice — la forma as $cle => $valeur para los asociativos.

Lección: escapar los datos mostrados (htmlspecialchars) — reflejo de seguridad desde los bucles.

Vocabulario de la sección

Bucle
Repite un tratamiento en lugar de duplicar el código; indispensable para manipular colecciones o repetir una acción.

Ejemplo sencillo: La visualización del catálogo de Riad, repetida por elemento.

Lo que no es: copiar diez veces el mismo bloque de visualización.

Reflejo: en cuanto un tratamiento se repite, un bucle.

for
Bucle con contador, cuando se conoce el número de repeticiones: for ($i = 0; $i < 10; $i++) { ... } (inicialización; condición; incremento).

Ejemplo sencillo: La numeración de las páginas del catálogo de Riad.

Lo que no es: recorrer un array con índice manual y error de límite.

Reflejo: for = contador útil, límites verificados.

while / do...while
while: repite MIENTRAS una condición sea verdadera (número desconocido). do...while: ejecuta al menos una vez (prueba al final).

Ejemplo sencillo: Riad que relee líneas mientras queden.

Lo que no es: un while cuya condición no cambia nunca (infinito).

Reflejo: asegurarse de que la condición acabará siendo falsa.

foreach
Bucle para RECORRER un array (el más usado): foreach ($tab as $valeur) (cada valor) o foreach ($tab as $cle => $valeur) (pares clave → valor).

Ejemplo sencillo: Las prestaciones mostradas una por una por Riad.

Lo que no es: un for + $tab[$i] con riesgo de desbordamiento.

Reflejo: array a recorrer = foreach, forma con claves si hace falta.

break / continue
break: SALE del bucle inmediatamente. continue: PASA a la siguiente iteración. Cuidado con los bucles INFINITOS (condición que nunca se vuelve falsa).

Ejemplo sencillo: El break de Riad en cuanto encuentra la prestación.

Lo que no es: recorrer 500 líneas cuando el objetivo está en la 3.ª.

Reflejo: break para detener, continue para ignorar.

En la práctica — En la práctica — Repetir y recorrer con los bucles

  1. Escriba un bucle for (ej. mostrar los números del 1 al 10) y un bucle while (repetir mientras una condición sea verdadera).
  2. Recorra un array con foreach: `foreach ($produits as $produit) { ... }`, luego con clave => valor sobre un array asociativo.
  3. Use break (salir en cuanto encuentre un elemento) y continue (ignorar ciertos elementos) en un bucle.
  4. Verifique que ningún bucle sea infinito (la condición acaba siendo falsa) y localice la sintaxis alternativa `foreach (...): ... endforeach;` para las plantillas.
Repite tratamientos y recorre colecciones con for, while y sobre todo foreach (el más usado), controlando el flujo con break/continue — en el corazón del tratamiento de datos.

Script listo para decir — proponer foreach en revisión de código (30 s)

« Propongo pasar este bucle for a foreach: recorremos un array, así que no hace falta un índice manual — eliminamos el riesgo de error de límite. Y añadimos htmlspecialchars a la visualización, ya que iteramos sobre datos mostrados. »

Para decir en revisión de código; mostrar el antes/después sobre el bucle real.

Modelo copiar-pegar — catálogo mostrado en foreach (escapado)

 $prestation) {
    echo ($i + 1) . '. ' . htmlspecialchars($prestation) . "\n";
}
$recherche = 'Boutique';
foreach ($prestations as $prestation) {
    if ($prestation === $recherche) {
        echo 'Trouvee : ' . htmlspecialchars($prestation);
        break;
    }
}

Catálogo en Constantine

Como Riad: foreach sobre las prestaciones, número de orden calculado, htmlspecialchars sistemático — el catálogo se muestra completo y seguro.

Búsqueda con parada

Un break en cuanto se encuentra el elemento: inútil recorrer el resto del array cuando el objetivo está localizado.

Páginas numeradas

Un for acotado para numerar o repetir N veces — el contador es la razón de ser del for, no el recorrido.

Lista en una plantilla

En el HTML, la forma foreach (...): ... endforeach; se lee mejor mezclada con las etiquetas — mismo bucle, sintaxis adaptada.

✓ Buenas prácticas

  • Usar foreach para recorrer un array (más simple que un for + índice).
  • Reservar for para los casos donde el contador/índice sea realmente útil.
  • Verificar que una condición de while/for acabará siendo falsa.

✗ Errores frecuentes

  • Crear un bucle infinito (incremento olvidado, condición mal escrita).
  • Iterar un array con for + índice cuando basta foreach.
  • Mostrar datos sin escapar en un bucle (XSS).

Puntos clave

  • Los BUCLES repiten un tratamiento: `for` (con contador, número conocido), `while` (mientras una condición sea verdadera, número desconocido), `do...while` (al menos una vez).
  • FOREACH es EL bucle clave de PHP: recorrer un ARRAY — `foreach ($tab as $valeur)` o `foreach ($tab as $cle => $valeur)`. Omnipresente (mostrar listas, tratar resultados).
  • `break` sale del bucle, `continue` pasa a la siguiente iteración. Cuidado con los BUCLES INFINITOS (condición que nunca se vuelve falsa → script bloqueado).
  • Sintaxis alternativa `foreach (...): ... endforeach;` privilegiada en las PLANTILLAS HTML. Los bucles tratan CONJUNTOS de datos — en el corazón de las aplicaciones web.

Reto 48h — aplique mañana

Convierta un bucle for + índice que recorre un array en foreach (modelo anterior), añada htmlspecialchars a la visualización y un break sobre una búsqueda. Compare antes/después en local. 20 minutos bastan.

Lista de salida de la sección
  • Elijo for, while o foreach según el caso — foreach para los arrays.
  • Uso break/continue cuando toca y mis bucles terminan.
  • Escapo los datos mostrados en mis bucles.
Autoevaluación 1-5: ¿recorro los arrays en foreach sin índice manual?¿mis bucles muestran datos escapados?

Preguntas frecuentes

¿Cuándo usar for, while o foreach — cómo elegir el bucle correcto?

foreach: para RECORRER una colección (el caso más frecuente en PHP) — gestiona la iteración automáticamente, por tanto más simple y seguro que un for. Dos formas: `as $valeur` y `as $cle => $valeur` (para los asociativos). for: cuando necesita un CONTADOR o un número preciso, un paso particular — pero para simplemente recorrer un array, foreach es preferible. while: cuando el final depende de una CONDICIÓN dinámica, sin conocer el número por adelantado — asegurándose de que acabará siendo falsa. En PHP web, foreach domina.

¿Por qué foreach es tan central en PHP, y cómo usarlo eficazmente?

El desarrollo web PHP consiste en gran parte en MANIPULAR ARRAYS: resultados de consultas, datos de formulario, configuraciones — y foreach es la herramienta ideal: simple, seguro (sin índice, sin bucle infinito) y legible. Eficazmente: elegir la forma correcta (`as $valeur` o `as $cle => $valeur`), mostrar con `htmlspecialchars`, usar la sintaxis alternativa en las plantillas, combinar con break/continue, y conocer array_map/filter/reduce (1.5) para las transformaciones.

Comprueba tu comprensión

¿Cuál es el bucle clave de PHP para recorrer un array?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 1Preguntas inéditas y más difíciles para validar tus conocimientos