for

(PHP 4, PHP 5, PHP 7, PHP 8)

Les boucles for sont les boucles les plus complexes en PHP. Elles fonctionnent comme les boucles for du langage C. La syntaxe des boucles for est la suivante :

for (expr1; expr2; expr3)
    commandes

La première expression (expr1) est évaluée (exécutée) une seule fois, sans condition, au début de la boucle.

Au début de chaque itération, l'expression expr2 est évaluée. Si l'évaluation vaut true, la boucle continue et les commandes sont exécutées. Si l'évaluation vaut false, l'exécution de la boucle s'arrête.

À la fin de chaque itération, l'expression expr3 est évaluée (exécutée).

Les expressions peuvent éventuellement être laissées vides ou peuvent contenir plusieurs expressions séparées par des virgules. Dans expr2, toutes les expressions séparées par une virgule sont évaluées mais le résultat est obtenu depuis la dernière partie. Si l'expression expr2 est laissée vide, cela signifie que c'est une boucle infinie (PHP considère implicitement qu'elle vaut true, comme en C). Cela peut être moins inutile qu'il n'y paraît, car il est souvent souhaitable de terminer la boucle par une instruction conditionnelle break plutôt que d'utiliser l'expression de vérité de la boucle for.

Considérons les exemples suivants. Tous affichent les nombres entiers de 1 à 10 :

<?php
for ($i = 1; $i <= 10; $i++) {
    echo $i . " ";
}

L'exemple ci-dessus va afficher :

1 2 3 4 5 6 7 8 9 10
<?php
for ($i = 1; ; $i++) {
    if ($i > 10) {
        break;
    }
    echo $i . " ";
}

L'exemple ci-dessus va afficher :

1 2 3 4 5 6 7 8 9 10
<?php
$i = 1;
for (; ; ) {
    if ($i > 10) {
        break;
    }
    echo $i . " ";
    $i++;
}

L'exemple ci-dessus va afficher :

1 2 3 4 5 6 7 8 9 10
<?php
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i . " ", $i++);

L'exemple ci-dessus va afficher :

1 2 3 4 5 6 7 8 9 10

Bien évidemment, le premier exemple est le plus simple de tous (ou peut-être le quatrième), mais il est aussi possible de penser qu'utiliser une expression vide dans une boucle for peut être utile parfois.

PHP supporte aussi la syntaxe alternative suivante pour les boucles for :

for (expr1; expr2; expr3):
    commandes
    ...
endfor;

Les expressions expr2 et expr3 sont évaluées à chaque itération. Il est conseillé d'y employer des expressions simples pour éviter les problèmes de performance. Par exemple, si le nombre d'itérations est connu à l'avance, il vaut mieux utiliser une variable plutôt qu'un appel de fonction dans expr2 :

<?php

$people = ['Kalle', 'Pierre'];

// Mauvaise pratique : appeler une fonction à chaque itération
for($i = 0; $i < getIterationCount($people); ++$i) {
    $people[$i] .= ' est sympa';
}

// Bonne pratique : stocker le nombre dans une variable
for($i = 0, $peopleCount = getIterationCount($people); $i < $peopleCount; ++$i) {
    $people[$i] .= ' est sympa';
}

Dans l'exemple ci-dessus, la fonction est appelée à chaque itération de la première boucle, alors qu'elle retourne toujours la même valeur. Stocker cette valeur dans une variable, comme le fait la seconde boucle, n'appelle la fonction qu'une seule fois. Il est à noter que le nombre d'itérations est alors figé : si le tableau est modifié à l'intérieur de la boucle, la valeur stockée ne reflète plus sa taille.

Note:

La taille d'un tableau est stockée avec le tableau, ce qui signifie que l'appel à la fonction native count() ne nécessite pas de compter les éléments et ne pose pas de problème de performance. Ceci ne s'applique pas à COUNT_RECURSIVE, qui parcourt tout le tableau. Il faut également être prudent lors de l'utilisation de count() sur des objets implémentant Countable, car de tels appels peuvent être plus coûteux.

Note:

La boucle for n'est pas la façon recommandée d'itérer sur des tableaux. La boucle foreach est spécifiquement conçue pour cet usage et est généralement plus pratique.

add a note

User Contributed Notes 2 notes

up
340
matthiaz
14 years ago
Looping through letters is possible. I'm amazed at how few people know that.

for($col = 'R'; $col != 'AD'; $col++) {
    echo $col.' ';
}

returns: R S T U V W X Y Z AA AB AC

Take note that you can't use $col < 'AD'. It only works with !=
Very convenient when working with excel columns.
up
73
nzamani at cyberworldz dot de
25 years ago
The point about the speed in loops is, that the middle and the last expression are executed EVERY time it loops.
So you should try to take everything that doesn't change out of the loop.
Often you use a function to check the maximum of times it should loop. Like here:

<?php
for ($i = 0; $i <= somewhat_calcMax(); $i++) {
  somewhat_doSomethingWith($i);
}
?>

Faster would be:

<?php
$maxI = somewhat_calcMax();
for ($i = 0; $i <= $maxI; $i++) {
  somewhat_doSomethingWith($i);
}
?>

And here a little trick:

<?php
$maxI = somewhat_calcMax();
for ($i = 0; $i <= $maxI; somewhat_doSomethingWith($i++)) ;
?>

The $i gets changed after the copy for the function (post-increment).
To Top