Module PHP.6 – Boucles
Objectif
Maîtriser toutes les boucles PHP : for, while, foreach, et leurs variantes pour répéter des opérations efficacement.
Théorie
for
La boucle for répète un bloc de code un nombre déterminé de fois.
Structure :
for (initialisation; condition; incrémentation) {
// Code à répéter
}
Exemple de base :
for ($i = 0; $i < 10; $i++) {
echo $i . " ";
}
// Affiche : 0 1 2 3 4 5 6 7 8 9
Variations :
// Compter à l'envers
for ($i = 10; $i > 0; $i--) {
echo $i . " ";
}
// Par pas de 2
for ($i = 0; $i < 10; $i += 2) {
echo $i . " "; // 0 2 4 6 8
}
// Boucle infinie (à éviter)
for (;;) {
// Code
if ($condition) break;
}
Boucles imbriquées :
for ($i = 1; $i <= 10; $i++) {
for ($j = 1; $j <= 10; $j++) {
echo $i . " x " . $j . " = " . ($i * $j) . "<br>";
}
}
while
La boucle while répète tant qu'une condition est vraie.
Structure :
while (condition) {
// Code
}
Exemple :
$i = 0;
while ($i < 10) {
echo $i . " ";
$i++;
}
Attention aux boucles infinies :
$i = 0;
while ($i < 10) {
echo $i;
// Oubli d'incrémenter $i = boucle infinie !
}
do-while : Exécute au moins une fois, puis vérifie la condition.
$i = 0;
do {
echo $i . " ";
$i++;
} while ($i < 10);
Quand utiliser do-while :
- Quand on veut exécuter au moins une fois
- Validation de saisie utilisateur
- Menu interactif
foreach
La boucle foreach parcourt les tableaux et objets.
Structure pour tableaux :
foreach ($tableau as $valeur) {
// Code
}
foreach ($tableau as $cle => $valeur) {
// Code avec clé et valeur
}
Exemples :
$nombres = [10, 20, 30, 40];
// Par valeur
foreach ($nombres as $nombre) {
echo $nombre . " ";
}
// Par clé et valeur
foreach ($nombres as $index => $nombre) {
echo "$index : $nombre<br>";
}
Tableaux associatifs :
$personne = [
"nom" => "Dupont",
"age" => 30,
"ville" => "Paris"
];
foreach ($personne as $cle => $valeur) {
echo "$cle : $valeur<br>";
}
Tableaux multidimensionnels :
$etudiants = [
["nom" => "Jean", "note" => 15],
["nom" => "Marie", "note" => 18],
["nom" => "Pierre", "note" => 12]
];
foreach ($etudiants as $etudiant) {
echo $etudiant["nom"] . " : " . $etudiant["note"] . "<br>";
}
Modifier les valeurs (référence) :
$nombres = [10, 20, 30];
foreach ($nombres as &$nombre) {
$nombre *= 2; // Modifie le tableau original
}
unset($nombre); // Important : détruire la référence
// $nombres = [20, 40, 60]
Contrôle des boucles
break : Sort de la boucle immédiatement
for ($i = 0; $i < 10; $i++) {
if ($i == 5) {
break; // Sort de la boucle
}
echo $i;
}
// Affiche : 0 1 2 3 4
continue : Passe à l'itération suivante
for ($i = 0; $i < 10; $i++) {
if ($i % 2 == 0) {
continue; // Passe les nombres pairs
}
echo $i;
}
// Affiche : 1 3 5 7 9
break/continue avec niveau :
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if ($j == 1) {
break 2; // Sort des 2 boucles
}
echo "$i-$j ";
}
}
Labels (PHP 7.3+) :
boucle_externe:
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
if ($condition) {
break boucle_externe;
}
}
}
Comparaison des boucles
Quand utiliser for :
- Nombre d'itérations connu
- Parcourir avec un index
- Répéter un nombre fixe de fois
Quand utiliser while :
- Nombre d'itérations inconnu
- Condition externe
- Attendre une action utilisateur
Quand utiliser foreach :
- Parcourir un tableau
- Parcourir un objet itérable
- Toujours préféré pour les tableaux
Fonctions de tableau utiles avec boucles
array_map : Applique une fonction à chaque élément
$nombres = [1, 2, 3, 4];
$doubles = array_map(function($n) {
return $n * 2;
}, $nombres);
// [2, 4, 6, 8]
array_filter : Filtre les éléments
$nombres = [1, 2, 3, 4, 5];
$pairs = array_filter($nombres, function($n) {
return $n % 2 == 0;
});
// [2, 4]
array_reduce : Réduit à une valeur
$nombres = [1, 2, 3, 4];
$somme = array_reduce($nombres, function($carry, $item) {
return $carry + $item;
}, 0);
// 10
Exercice
-
Boucle for
- Affichez les nombres de 1 à 100
- Affichez seulement les nombres pairs
- Créez une table de multiplication
-
Boucle while
- Demandez un nombre jusqu'à ce qu'il soit valide
- Comptez jusqu'à ce qu'une condition soit remplie
- Comparez avec do-while
-
Boucle foreach
- Parcourez un tableau indexé
- Parcourez un tableau associatif
- Parcourez un tableau multidimensionnel
-
Contrôle des boucles
- Utilisez break pour sortir prématurément
- Utilisez continue pour sauter des itérations
- Testez break avec niveau
-
Fonctions de tableau
- Utilisez array_map pour transformer un tableau
- Utilisez array_filter pour filtrer
- Utilisez array_reduce pour calculer une somme
Quiz
-
Quelle boucle utiliser pour parcourir un tableau ?
- for
- foreach (recommandé)
- while
-
Que fait
break 2?- Sort de 2 boucles
- Sort de 2 niveaux de boucles
- Répète 2 fois
-
Quelle est la différence entre while et do-while ?
- Aucune différence
- do-while exécute au moins une fois
- while est plus rapide
-
Comment modifier les valeurs d'un tableau dans foreach ?
- Impossible
- Utiliser la référence &
- Utiliser array_map
-
Que fait continue dans une boucle ?
- Sort de la boucle
- Passe à l'itération suivante
- Répète l'itération
Mini défi
Mission : Créer un système de traitement de données
Créez un script qui traite une liste d'étudiants avec leurs notes :
Données d'entrée :
$etudiants = [
["nom" => "Jean", "notes" => [15, 18, 12, 14]],
["nom" => "Marie", "notes" => [16, 17, 19, 18]],
["nom" => "Pierre", "notes" => [10, 11, 9, 12]],
["nom" => "Sophie", "notes" => [20, 19, 18, 20]]
];
Traitements à effectuer :
-
Calculer la moyenne de chaque étudiant
- Parcourez chaque étudiant
- Calculez la moyenne de ses notes
- Ajoutez la moyenne au tableau
-
Déterminer l'appréciation
-
= 16 : "Très bien"
-
= 14 : "Bien"
-
= 12 : "Assez bien"
-
= 10 : "Passable"
- < 10 : "Insuffisant"
-
-
Statistiques globales
- Moyenne générale de tous les étudiants
- Nombre d'étudiants par appréciation
- Meilleure et pire moyenne
-
Filtres
- Afficher seulement les étudiants avec moyenne >= 14
- Afficher seulement ceux avec "Très bien"
- Trier par moyenne décroissante
Critères :
- ✅ Utilisation de foreach pour parcourir
- ✅ Utilisation de for pour calculer les moyennes
- ✅ Utilisation de array_map, array_filter si approprié
- ✅ Code clair et bien organisé
- ✅ Affichage formaté et lisible
Objectif : Maîtriser toutes les boucles PHP et les utiliser efficacement pour traiter des données.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez for, while, foreach et pouvez les utiliser pour résoudre des problèmes complexes.