Langage PHP

Les boucles while, for et foreach en PHP

Imaginez que vous êtes en train de créer le forum de votre site. Sur une page, on affiche par exemple une trentaine de messages. Il serait bien trop long et répétitif de dire :

 « Affiche le message 1 et le nom de son auteur »,

 « Affiche le message 2 et le nom de son auteur »,

« Affiche le message 3 et le nom de son auteur », etc.

Pour éviter d'avoir à faire cela, on peut utiliser un système de boucle qui nous permettra de dire une seule fois : « Affiche 30 messages et le nom de leur auteur à chaque fois ».

Qu'est-ce qu'une boucle ? 

Concrètement, une boucle permet de répéter des instructions plusieurs fois. En clair, c'est un gain de temps, c'est très pratique, et bien souvent indispensable.

On peut si vous voulez présenter le principe dans le schéma suivante.


Le seul hic dans ce schéma, c'est que ça ne s'arrête jamais ! Les instructions seraient réexécutées à l'infini !

C'est pour cela que, quel que soit le type de boucle (while ou for), il faut indiquer une condition. Tant que la condition est remplie, les instructions sont réexécutées. Dès que la condition n'est plus remplie, on sort enfin de la boucle.

I. la boucle While :

Voici comment faire avec une boucle simple : while.

<?php
while($continuer_boucle==true){
    // instructions à executer dans la boucle
}
?>

while peut se traduire par « tant que ».

Ici, on demande à PHP : TANT QUE $continuer_boucle est vrai, exécuter ces instructions.

Les instructions qui sont répétées en boucle se trouvent entre les accolades { et }.

Exemple 1 :

Afficher la phrase : « Je suis un étudiant en CPGE » 10 fois.

<?php
$nb=1;
while ($nb <= 10) {
   echo 'je suis etudiant en CPGE';
   $nb++;
}
?>

Il faut TOUJOURS s'assurer que la condition sera fausse au moins une fois. Si elle ne l'est jamais, alors la boucle s'exécutera à l'infini !

On peut a tous moment sortir d'une boucle avec l'inscruction exit ou break.

PHP refuse normalement de travailler plus d'une quinzaine de secondes. Il s'arrêtera tout seul s'il voit que son travail dure trop longtemps et affichera un message d'erreur.

Exemple 2 :

On veut afficher les phrases suivantes :

Ceci est la ligne n°1

Ceci est la ligne n°2

… jusqu’à

Ceci est la ligne n°100

<?php
$nb=1;
while ($nb <= 100) {
   echo 'Ceci est la ligne n° '.$nb.' <br />';
   $nb++;
}
?>

Pour information, l'astuce que je vous avais donnée dans le chapitre sur les conditions marche aussi ici : vous pouvez fermer la balise PHP ?>, écrire du texte en HTML, puis rouvrir la balise PHP <?php. Cela vous évite d'utiliser une ou plusieurs instructions echo au milieu. On aura l'occasion d'utiliser cette astuce de nombreuses fois dans la suite du cours.

II. la boucle FOR :

for est un autre type de boucle, dans une forme un peu plus condensée et plus commode à écrire, ce qui fait que for est assez fréquemment utilisé.

Cependant, sachez que for et while donnent le même résultat et servent à la même chose : répéter des instructions en boucle. L'une peut paraître plus adaptée que l'autre dans certains cas, cela dépend aussi des goûts.

Alors, comment ça marche un for ? Ça ressemble beaucoup au while, mais c'est la première ligne qui est un peu particulière.

<?php
for ($nbr=0; $nbr <= 100; $nbr++) {
   echo 'Ceci est la ligne n° '.$nbr.' <br />';
}
?>

Pour que vous voyiez bien la différence avec le while, je reprends exactement l'exemple précédent, mais cette fois avec un for :

Que de choses dans une même ligne !

Après le mot for, il y a des parenthèses qui contiennent trois éléments, séparés par des points-virgules ;.

Décrivons chacun de ces éléments :

Le premier sert à l'initialisation. C'est la valeur que l'on donne au départ à la variable (ici, elle vaut 1).

Le second, c'est la condition. Comme pour le while, tant que la condition est remplie, la boucle est réexécutée. Dès que la condition ne l'est plus, on en sort.

Enfin, le troisième c'est l'incrémentation, qui vous permet d'ajouter 1 à la variable à chaque tour de boucle.

Les deux derniers codes donnent donc exactement le même résultat. Le for fait la même chose que le while, mais rassemble sur une seule ligne tout ce qu'il faut savoir sur le fonctionnement de la boucle.

Comment savoir lequel prendre quand je dois choisir entre un while et un for ?

La boucle while est plus simple et plus flexible : on peut faire tous les types de boucles avec mais on peut oublier de faire certaines étapes comme l'incrémentation de la variable.

En revanche, for est bien adapté quand on doit compter le nombre de fois que l'on répète les instructions et il permet de ne pas oublier de faire l'incrémentation pour augmenter la valeur de la variable !

Si vous hésitez entre les deux, il suffit simplement de vous poser la question suivante : « Est-ce que je sais d'avance combien  de fois je veux que mes instructions soient répétées ? ».

Si la réponse est oui, alors la boucle for est tout indiquée. Sinon, alors il vaut mieux utiliser la boucle while.

III. la boucle foreach :

La boucle for a beau fonctionné, on peut utiliser un autre type de boucle plus adapté aux tableaux qu'on n'a pas encore vu jusqu'ici : foreach. C'est une sorte de boucle for spécialisée dans les tableaux.

foreach va passer en revue chaque ligne du tableau, et lors de chaque passage, elle va mettre la valeur de cette ligne dans une variable temporaire (par exemple $elm).

Regardez plutôt :

<?php
$prenoms= array('Mostafa', 'Sara', 'Ismail', 'Abderrahim','Khaoula', 'Dounia','Fatima');
foreach ($prenoms as $elm ) {
   echo $elm.' <br/>';
}
?>

C'est le même code que tout à l'heure mais cette fois basé sur une boucle foreach. À chaque tour de boucle, la valeur de l'élément suivant est mise dans la variable $elm. On peut donc utiliser $elm uniquement à l'intérieur de la boucle afin d'afficher l'élément en cours.

L'avantage de foreach est qu'il permet aussi de parcourir les tableaux associatifs.

<?php
$coordonnees= array('nom'=>'ESSADDOUKI', 'prenom'=>'Mostafa', 'sexe'=>'Masculin', 'ville'=>'Meknes');
foreach ($coordonnees as $elm ) {
   echo $elm.' <br/>';
}
?>

Toutefois, avec cet exemple, on ne récupère que la valeur. Or, on peut aussi récupérer la clé de l'élément. On doit dans ce cas écrire foreach comme ceci :

<?php
$coordonnees= array('nom'=>'ESSADDOUKI', 'prenom'=>'Mostafa', 'sexe'=>'Masculin', 'ville'=>'Meknes');
foreach ($coordonnees as $cle => $elm) {
   echo '['.$cle.'] est : '.$elm.' <br/>';
}
?>

Avec cette façon de procéder, vous avez maintenant dans la boucle la clé et la valeur.


Partager ce cours avec tes amis :
Rédigé par Mostafa Sedoki
Computer science teacher and the founder of the e-learning platform "developpement-informatique.com", my mission is to provide high-quality courses for free to all computer science students and teachers

Cours Similaires :