1.3Boucles : for, while, foreach
L'essentiel en 30 secondes
- foreach = la boucle du quotidien : foreach ($tab as $valeur) ou as $cle => $valeur — parcourir sans gérer d'index.
- for = compteur, while = condition : for quand le nombre est connu, while tant qu'une condition est vraie (et do...while au moins une fois).
- break sort, continue saute : et toute boucle doit pouvoir se terminer — gare aux boucles infinies.
Mini-cas filé — Riad affiche son catalogue à Constantine
Riad doit afficher le catalogue de son site vitrine : une liste de prestations stockée en tableau. Il écrit d'abord une boucle for avec un index manuel — et affiche un élément en trop à cause d'une erreur de borne. Il passe au foreach : chaque prestation s'affiche sans gérer d'index, avec htmlspecialchars pour échapper. Il ajoute un break pour arrêter la recherche dès la prestation trouvée, et un compteur for pour numéroter les pages. Le catalogue s'affiche complet, sans dépassement.
Suite du cas 1.1-1.2 — Riad passe des décisions à la répétition.
1. for, while, do...while
Les boucles RÉPÈTENT un traitement. Le for : quand on connaît le nombre de répétitions (ou qu'on itère avec un compteur) — for ($i = 0; $i < 10; $i++) { … }. Le while : tant qu'une condition est vraie (nombre inconnu). Le do...while : exécute au moins une fois (test à la fin). Vigilance : une boucle infinie (condition qui ne devient jamais fausse, incrément oublié) bloque le script.
Riad numérote ses pages avec un for borné et vérifie que son compteur avance : aucune boucle infinie ne bloquera l'affichage du catalogue.
2. foreach & break/continue
La boucle clé de PHP est le foreach : parcourir un tableau — foreach ($tab as $valeur) (chaque valeur) ou foreach ($tab as $cle => $valeur) (paires clé → valeur). Omniprésent : afficher des listes, traiter des résultats de base. break sort de la boucle immédiatement ; continue passe à l'itération suivante. Dans les templates : syntaxe alternative foreach (…): … endforeach;.
Riad parcourt ses prestations en foreach, échappe chaque nom avec htmlspecialchars, et stoppe la recherche avec break dès la prestation trouvée.
🔎 Exemple concret — 🔎 Exemple concret — Parcourir une collection
Le cas dominant en PHP, comme Riad pour son catalogue.
$produits = ['pomme', 'banane', 'cerise'];
foreach ($produits as $produit) {
echo htmlspecialchars($produit) . ' ';
}
// associatif :
foreach ($config as $cle => $valeur) {
echo $cle . ' : ' . $valeur . ' ';
}
Lecture : chaque élément est traité sans gérer d'index — la forme as $cle => $valeur pour les associatifs.
Leçon : échapper les données affichées (htmlspecialchars) — réflexe sécurité dès les boucles.
Vocabulaire de la section
- Boucle
- Répète un traitement plutôt que de dupliquer le code ; indispensable pour manipuler des collections ou répéter une action.
Exemple simple : L'affichage du catalogue de Riad, répété par élément.
Ce que ce n'est pas : copier dix fois le même bloc d'affichage.
Réflexe : dès qu'un traitement se répète, une boucle.
- for
- Boucle avec compteur, quand on connaît le nombre de répétitions : for ($i = 0; $i < 10; $i++) { ... } (initialisation ; condition ; incrément).
Exemple simple : La numérotation des pages du catalogue de Riad.
Ce que ce n'est pas : parcourir un tableau avec index manuel et erreur de borne.
Réflexe : for = compteur utile, bornes vérifiées.
- while / do...while
- while : répète TANT QU'une condition est vraie (nombre inconnu). do...while : exécute au moins une fois (test à la fin).
Exemple simple : Riad qui relit des lignes tant qu'il en reste.
Ce que ce n'est pas : un while dont la condition ne change jamais (infinie).
Réflexe : s'assurer que la condition finira par être fausse.
- foreach
- Boucle pour PARCOURIR un tableau (la plus utilisée) : foreach ($tab as $valeur) (chaque valeur) ou foreach ($tab as $cle => $valeur) (paires clé → valeur).
Exemple simple : Les prestations affichées une par une par Riad.
Ce que ce n'est pas : un for + $tab[$i] avec risque de dépassement.
Réflexe : tableau à parcourir = foreach, forme avec clés si besoin.
- break / continue
- break : SORT de la boucle immédiatement. continue : PASSE à l'itération suivante. Attention aux boucles INFINIES (condition qui ne devient jamais fausse).
Exemple simple : Le break de Riad dès la prestation trouvée.
Ce que ce n'est pas : parcourir 500 lignes alors que la cible est en 3e.
Réflexe : break pour arrêter, continue pour ignorer.
En pratique — En pratique — Répéter et parcourir avec les boucles
- Écrivez une boucle for (ex. afficher les nombres de 1 à 10) et une boucle while (répéter tant qu'une condition est vraie).
- Parcourez un tableau avec foreach : `foreach ($produits as $produit) { ... }`, puis avec clé => valeur sur un tableau associatif.
- Utilisez break (sortir dès qu'on trouve un élément) et continue (ignorer certains éléments) dans une boucle.
- Vérifiez qu'aucune boucle n'est infinie (la condition finit par être fausse) et repérez la syntaxe alternative `foreach (...): ... endforeach;` pour les templates.
Script prêt à dire — proposer foreach en revue de code (30 s)
« Je propose qu'on passe cette boucle for en foreach : on parcourt un tableau, donc pas besoin d'index manuel — on élimine le risque d'erreur de borne. Et on ajoute htmlspecialchars à l'affichage, puisqu'on boucle sur des données affichées. »
À dire en revue de code ; montrer l'avant/après sur la boucle réelle.
Modèle copier-coller — catalogue affiché en foreach (échappé)
$prestation) {
echo ($i + 1) . '. ' . htmlspecialchars($prestation) . "\n";
}
$recherche = 'Boutique';
foreach ($prestations as $prestation) {
if ($prestation === $recherche) {
echo 'Trouvee : ' . htmlspecialchars($prestation);
break;
}
}
Catalogue à Constantine
Comme Riad : foreach sur les prestations, numéro d'ordre calculé, htmlspecialchars systématique — le catalogue s'affiche complet et sûr.
Recherche avec arrêt
Un break dès l'élément trouvé : inutile de parcourir la suite du tableau quand la cible est localisée.
Pages numérotées
Un for borné pour numéroter ou répéter N fois — le compteur est la raison d'être du for, pas le parcours.
Liste dans un template
Dans le HTML, la forme foreach (...): ... endforeach; se lit mieux mêlée aux balises — même boucle, syntaxe adaptée.
✓ Bonnes pratiques
- Utiliser foreach pour parcourir un tableau (plus simple qu'un for + index).
- Réserver for aux cas où le compteur/index est réellement utile.
- Vérifier qu'une condition de while/for finira par être fausse.
✗ Pièges fréquents
- Créer une boucle infinie (incrément oublié, condition mal écrite).
- Itérer un tableau avec for + index quand foreach suffit.
- Afficher des données non échappées dans une boucle (XSS).
Points clés à retenir
- Les BOUCLES répètent un traitement : `for` (avec compteur, nombre connu), `while` (tant qu'une condition est vraie, nombre inconnu), `do...while` (au moins une fois).
- FOREACH est LA boucle clé de PHP : parcourir un TABLEAU — `foreach ($tab as $valeur)` ou `foreach ($tab as $cle => $valeur)`. Omniprésente (afficher des listes, traiter des résultats).
- `break` sort de la boucle, `continue` passe à l'itération suivante. Attention aux BOUCLES INFINIES (condition qui ne devient jamais fausse → script bloqué).
- Syntaxe alternative `foreach (...): ... endforeach;` privilégiée dans les TEMPLATES HTML. Les boucles traitent des ENSEMBLES de données — au cœur des applications web.
Défi 48h — appliquez demain
Convertissez une boucle for + index qui parcourt un tableau en foreach (modèle ci-dessus), ajoutez htmlspecialchars à l'affichage et un break sur une recherche. Comparez avant/après en local. 20 minutes suffisent.
- Je choisis for, while ou foreach selon le cas — foreach pour les tableaux.
- J'utilise break/continue à propos et mes boucles se terminent.
- J'échappe les données affichées dans mes boucles.
Questions fréquentes
Quand utiliser for, while ou foreach — comment choisir la bonne boucle ?
foreach : pour PARCOURIR une collection (le cas le plus fréquent en PHP) — il gère l'itération automatiquement, donc plus simple et sûr qu'un for. Deux formes : `as $valeur` et `as $cle => $valeur` (pour les associatifs). for : quand vous avez besoin d'un COMPTEUR ou d'un nombre précis, d'un pas particulier — mais pour simplement parcourir un tableau, foreach est préférable. while : quand la fin dépend d'une CONDITION dynamique, sans connaître le nombre à l'avance — en s'assurant qu'elle finira par être fausse. En PHP web, foreach domine.
Pourquoi foreach est-il si central en PHP, et comment l'utiliser efficacement ?
Le développement web PHP consiste largement à MANIPULER DES TABLEAUX : résultats de requêtes, données de formulaire, configurations — et foreach est l'outil idéal : simple, sûr (pas d'index, pas de boucle infinie) et lisible. Efficacement : choisir la bonne forme (`as $valeur` ou `as $cle => $valeur`), afficher avec `htmlspecialchars`, utiliser la syntaxe alternative dans les templates, combiner avec break/continue, et connaître array_map/filter/reduce (1.5) pour les transformations.
Quelle est la boucle clé de PHP pour parcourir un tableau ?