1.3Bucles: for, while, foreach
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.
🔎 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
- Escriba un bucle for (ej. mostrar los números del 1 al 10) y un bucle while (repetir mientras una condición sea verdadera).
- Recorra un array con foreach: `foreach ($produits as $produit) { ... }`, luego con clave => valor sobre un array asociativo.
- Use break (salir en cuanto encuentre un elemento) y continue (ignorar ciertos elementos) en un bucle.
- Verifique que ningún bucle sea infinito (la condición acaba siendo falsa) y localice la sintaxis alternativa `foreach (...): ... endforeach;` para las plantillas.
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.
- 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.
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.
¿Cuál es el bucle clave de PHP para recorrer un array?