for
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), quoi qu'il arrive 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 l'instruction est ex�cut�e. 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 n'est pas vraiment tr�s utile, � moins que vous souhaitiez terminer votre boucle par l'instruction conditionnelle break.
Consid�rons les exemples suivants. Tous affichent les chiffres de 1 jusqu'� 10 :
<?php
/* exemple 1 */
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
/* exemple 2 */
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
/* exemple 3 */
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
/* exemple 4 */
for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);
?>
Bien �videmment, le premier exemple est le plus simple de tous (ou peut �tre le quatri�me), mais vous pouvez aussi pensez 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;
Beaucoup de personnes ont l'habitude d'it�rer gr�ce � des tableaux, comme dans l'exemple ci dessous.
<?php
/*
* Ceci est un tableau avec des donn�es que nous voulons modifier
* au long de la boucle
*/
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0; $i < sizeof($people); ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>
Le probl�me se situe dans le deuxi�me argument de l'expression for. Ce code peut �tre lent parce qu'il doit caclculer la taille du tableau � chaque it�ration. Etant donn� que la taille ne change jamais, il peut facilement �tre optimis� en utilisant une variable interm�diaire pour stocker la taille et en l'utilisant dans la boucle � la place de sizeof. L'exemple ci-dessous illustre ce cas :
<?php
$people = Array(
Array('name' => 'Kalle', 'salt' => 856412),
Array('name' => 'Pierre', 'salt' => 215863)
);
for($i = 0, $size = sizeof($people); $i < $size; ++$i)
{
$people[$i]['salt'] = rand(000000, 999999);
}
?>