W3docs

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 :

ExpressionQuand elle s'exécuteUtilisation typique
initializationUne fois, avant le démarrage de la boucleInitialiser un compteur, ex. $i = 0
conditionAvant chaque itérationLa boucle continue tant qu'elle est vraie
incrementAprès chaque itérationAvancer 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
// 5

Le 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.

« Essayez vous-même » n'est pas disponible pour cet exemple.

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
// blue

Notez 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 10

Expressions 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-6

Si 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
// 2

Utilisez 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	9

La 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.1 accumule 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.

Exercice pratique

Pratique
Quelle est l'utilisation de la boucle 'for' en PHP ?
Quelle est l'utilisation de la boucle 'for' en PHP ?
Was this page helpful?