Leçons PHP - leçon 12 - Boucles while, foreach, for
Souvent en programmation, comme dans la vie quotidienne, nous devons effectuer des actions répétitives jusqu’à obtenir un résultat satisfaisant. Dans la vie courante, on appelle cela une corvée, en programmation ce sont des boucles (loops). Les boucles sont très fréquentes en PHP car c’est un moyen pratique de parcourir des tableaux, calculer des fonctions, et bien d’autres choses encore. Commençons par la plus simple et la plus populaire : while.
Les boucles while en PHP
while est très simple : on écrit la condition entre parenthèses, et dans les accolades ce qu’il faut faire tant que la condition est vraie. La condition est une expression logique qui peut être TRUE ou FALSE. Si vous souhaitez revoir les expressions logiques, lisez la leçon sur l’opérateur if. Voici un exemple de while :
<?php $counter = 5; $newArray = array(); while($counter > 2){ $newArray[]= $counter; $counter--; } print_r($newArray); ?>
Le résultat affichera les éléments du tableau 5, 4, 3. Voyons comment cela se passe :
Étape 1. $counter = 5 (5 > 2)
Étape 2. $counter = 4 (4 > 2)
Étape 3. $counter = 3 (3 > 2)
Étape 4. $counter = 2 (2 = 2, la condition n’est plus vraie, donc l’action ne se produit pas et 2 n’est pas dans le tableau)
Voici un autre exemple, la table de la fonction y(x) = 2x -1 :
<?php // fonction y(x) = 2x -1; $x = -10; while($x <= 10){ $y = 2*$x-1; print 'y(' . $x . ')=' . $y . '<br />'; $x++; } ?>
On affichera en colonne les valeurs de la fonction pour x dans [-10, 10].
Voici le schéma bloc d’une boucle while, c’est la vue générale de son fonctionnement. On a une condition, un corps de boucle, tant que la condition est vraie, le corps s’exécute, sinon PHP continue avec le code suivant.
Un point IMPORTANT : si vous supprimez la ligne $x++ qui permet d’incrémenter le compteur pour que la condition finisse par être fausse, que se passe-t-il ?
<?php // fonction y(x) = 2x -1; $x = -10; while($x <= 10){ $y = 2*$x-1; print 'y(' . $x . ')=' . $y . '<br />'; // $x++; } ?>
Ce sera très mauvais. La boucle s’exécutera sans fin. Cette situation s’appelle une boucle infinie. Évitez cela, une boucle infinie peut faire planter votre site !
Les boucles foreach en PHP
Un autre type de boucle très utile, souvent utilisée pour parcourir des tableaux. Parcourir un tableau signifie prendre un élément, faire quelque chose avec, puis passer au suivant, et ainsi de suite jusqu’à la fin.
Voici un exemple : on a dix éléments "rouge" et "bleu", comptons les éléments rouges :
<?php $counter = 0; $newArray =array( 1=>'rouge', 2=>'bleu', 3=>'bleu', 4=>'rouge', 5=>'rouge', 6=>'bleu', 7=>'rouge', 8=>'bleu', 9=>'rouge', 10=>'bleu', ); foreach($newArray as $key){ if($key == 'rouge'){ $counter++; } } print 'Nous avons ' . $counter . ' éléments rouges'; ?>
Ce simple exemple est clair. L’opérateur as permet de parcourir les éléments un par un. Quand tous les éléments sont parcourus, la boucle foreach s’arrête.
Mais certains tableaux sont plus complexes, ils peuvent contenir des tableaux imbriqués. On peut aussi parcourir ces sous-tableaux :
<?php $counter = 0; $newArray = array( 1=>array( 1 => 'rouge', 2 => 'bleu', 3 => 'bleu', ), 2=>array( 1 => 'rouge', 2 => 'rouge', 3 => 'bleu', ) ); foreach($newArray as $key){ foreach($key as $element){ if($element == 'rouge'){ $counter++; } } } print 'Nous avons ' . $counter . ' éléments rouges'; ?>
Je pense que le foreach est clair pour l’instant, nous nous arrêterons ici. Vous le reverrez souvent dans mes exemples.
La boucle FOR
La boucle for est similaire à while. On l’utilise généralement quand on connaît à l’avance le nombre d’itérations, par exemple 10 ou 100 :
for($i=0;$i<10;$i++){ // dix répétitions }
Décomposons la boucle for :
for(){ }
Comme les autres boucles, tous les paramètres sont entre parenthèses. On utilise généralement trois paramètres :
1. $i=0 - initialisation du compteur, variable pour le numéro de l’itération courante.
2. $i<10 - condition qui détermine si la boucle continue.
3. $i++ - incrémentation du compteur pour passer à l’itération suivante.