for
Apprenez la boucle for en PHP : initialisation, condition, incrément, itération d'array, boucles imbriquées et erreurs de décalage d'un.
La boucle for en PHP
for est la boucle à compteur contrôlé de PHP. On l'utilise quand on sait — ou peut calculer — exactement combien de fois un bloc de code doit s'exécuter : itérer de 0 à count($array) - 1, compter à rebours, ou avancer par intervalles. Cette page couvre les trois parties de l'en-tête de boucle, la façon dont chacune s'exécute, comment itérer sur des arrays, les boucles infinies et imbriquées, la syntaxe alternative endfor, et les erreurs de décalage d'un qui piègent la plupart des débutants.
Si vous souhaitez plutôt parcourir chaque élément d'un array ou d'un object sans gérer d'index, foreach est généralement le meilleur outil. Pour une boucle qui s'exécute tant qu'une condition est fausse, consultez while. Une comparaison générale de tous les types de boucles se trouve dans PHP Loops.
Syntaxe
for (initialization; condition; increment) {
// code to be executed on each pass
}L'en-tête comporte trois expressions, séparées par des points-virgules :
| Expression | Quand elle s'exécute | Utilisation typique |
|---|---|---|
initialization | Une fois, avant le démarrage de la boucle | Initialiser un compteur, ex. $i = 0 |
condition | Avant chaque itération | La boucle continue tant qu'elle est vraie |
increment | Après chaque itération | Avancer le compteur, ex. $i++ |
L'ordre d'exécution est : exécuter initialization, évaluer condition ; si elle est vraie, exécuter le corps, puis exécuter increment, puis réévaluer condition, et ainsi de suite. Dès que condition est fausse, la boucle s'arrête et le corps ne s'exécute pas cette dernière fois.
Premier exemple
<?php
for ($i = 1; $i <= 5; $i++) {
echo $i . PHP_EOL;
}
// Output:
// 1
// 2
// 3
// 4
// 5Le compteur commence à 1. Après avoir affiché 5, $i++ le passe à 6, 6 <= 5 est faux, et la boucle se termine — elle s'exécute donc exactement cinq fois.
Itérer sur un array
Un usage classique de for consiste à indexer un array. Mettez count() en cache dans une variable (ou utilisez le slot d'incrément) pour que PHP ne recompte pas l'array à chaque passage :
<?php
$colors = ["red", "green", "blue"];
for ($i = 0, $n = count($colors); $i < $n; $i++) {
echo $colors[$i] . PHP_EOL;
}
// Output:
// red
// green
// blueNotez que les index d'array commencent à 0, donc le dernier index valide est count($colors) - 1. La condition utilise < (et non <=) précisément pour cette raison — utiliser <= ici lirait un élément au-delà de la fin. Quand vous n'avez besoin que des valeurs et pas de l'index, préférez foreach, qui évite toute cette catégorie d'erreurs de décalage d'un.
Compter à rebours et avancer par pas
L'expression d'incrément est simplement du code — elle peut décrémenter ou sauter de n'importe quelle valeur :
<?php
// Count down
for ($i = 5; $i >= 1; $i--) {
echo $i . " ";
}
echo PHP_EOL;
// Output: 5 4 3 2 1
// Step by 2 (even numbers only)
for ($i = 0; $i <= 10; $i += 2) {
echo $i . " ";
}
// Output: 0 2 4 6 8 10Expressions multiples et slots vides
Chacun des trois slots peut contenir plusieurs expressions séparées par des virgules, et tout slot peut être laissé vide. Les points-virgules sont obligatoires même quand les slots sont vides :
<?php
// Two counters moving toward each other
for ($i = 0, $j = 10; $i < $j; $i++, $j--) {
echo "$i-$j" . PHP_EOL;
}
// Output:
// 0-10
// 1-9
// 2-8
// 3-7
// 4-6Si le slot de condition est vide, il est traité comme true, ce qui crée une boucle infinie. Vous contrôlez alors la sortie depuis le corps avec break :
<?php
$i = 0;
for (;;) {
if ($i >= 3) {
break;
}
echo $i . PHP_EOL;
$i++;
}
// Output:
// 0
// 1
// 2Utilisez continue pour sauter le reste de l'itération courante et passer directement à l'étape d'incrément.
Boucles imbriquées
Placer un for dans un autre permet de travailler avec des grilles, des tableaux et des motifs de type multiplication. Utilisez des noms de compteur distincts pour chaque niveau :
<?php
for ($row = 1; $row <= 3; $row++) {
for ($col = 1; $col <= 3; $col++) {
echo ($row * $col) . "\t";
}
echo PHP_EOL;
}
// Output:
// 1 2 3
// 2 4 6
// 3 6 9La boucle interne effectue toutes ses itérations pour chaque passage unique de la boucle externe.
Syntaxe alternative endfor
PHP propose une forme avec deux-points/endfor qui est pratique lors du mélange de boucles avec du HTML dans des templates, car elle évite les accolades fermantes parasites :
<?php for ($i = 1; $i <= 3; $i++): ?>
<p>Item <?= $i ?></p>
<?php endfor; ?>Ceci affiche trois paragraphes <p>. La même syntaxe alternative existe pour foreach/endforeach.
Pièges courants
- Erreurs de décalage d'un.
$i <= count($arr)lit un slot au-delà de la fin (avertissement d'index non défini) ; utilisez$i < count($arr). - Modification de la longueur de l'array dans la boucle. Si le corps ajoute ou supprime des éléments, un
count()mis en cache peut devenir obsolète — revérifiez, ou passez àforeach. - Boucles infinies accidentelles. Oublier l'incrément, ou comparer dans la mauvaise direction (ex.
$i--avec$i < 10), fait que la condition ne devient jamais fausse. - Compteurs en virgule flottante. Avancer de
0.1accumule des erreurs d'arrondi et peut dépasser la limite ; bouclez avec des entiers et divisez dans le corps à la place.
Quand utiliser for
Choisissez for quand le nombre d'itérations est connu ou calculé à l'avance et que vous avez réellement besoin de l'index (décomptes, répétitions fixes, avances par pas, construction de tableaux). Quand vous voulez simplement parcourir chaque élément d'une collection, foreach est plus lisible et plus sûr. Quand le nombre de répétitions dépend d'une condition qui change à l'intérieur de la boucle, utilisez while ou do...while.