Aller au menu - Aller au contenu

Icône Les boucles

Mise à jour : 03/04/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
133 390 visites depuis 7 jours, dont 2 396 sur ce chapitre classé 2/786
Dans la série des éléments de base de PHP à connaître absolument, voici les boucles ! Demander à l'ordinateur de répéter des instructions, ça il sait faire (et en plus il ne bronche jamais) !

Imaginez par exemple 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 respectif à chaque fois".

Bien entendu, nous n'allons pas pouvoir apprendre à créer le forum de votre site dans ce chapitre (il est encore trop tôt). Néanmoins, prenez bien le temps de comprendre le fonctionnement des boucles car nous en aurons besoin tout le long de ce cours. Ce n'est pas bien compliqué vous allez voir !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Une boucle simple : While

Qu'est-ce qu'une boucle ? C'est une structure qui fonctionne sur le même principe que les conditions (if... else). D'ailleurs vous allez voir qu'il y a beaucoup de similitudes avec le chapitre sur les conditions.
Concrètement, une boucle permet de répéter plusieurs fois des instructions. 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 un schéma :
Image utilisateur

Voilà ce qui se passe dans une boucle :
  1. Comme d'habitude, les instructions sont d'abord exécutées dans l'ordre, de haut en bas (flèche rouge)
  2. A la fin des instructions, on retourne à la première (flèche verte)
  3. Et on recommence à lire les instructions dans l'ordre (flèche rouge)
  4. Et on retourne à la première (flèche verte)
  5. etc etc...

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 (ouf !).

Voici comment faire avec une boucle simple : while.

Code : PHP
1
2
3
4
5
6
<?php
while ($continuer_boucle == true)
{
    // instructions à exécuter 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 }. Mais bon là je vous apprends rien, vous commencez à avoir l'habitude de voir des accolades de partout. ;)

Ce n'est pas beaucoup plus compliqué que ça, il n'y a guère plus de choses à savoir. Cependant, je vais quand même vous montrer 1 ou 2 exemples d'utilisation de boucles, pour que vous voyiez à quoi ça peut servir...

Pour notre premier exemple, on va supposer que vous avez été punis et que vous devez recopier 100 fois "Je ne dois pas regarder les mouches voler quand j'apprends le PHP."
Avant, il fallait prendre son mal en patience et ça prenait des heuuuures. Maintenant, avec PHP, on va faire ça en un clin d'oeil ! :D

Regardez ce code :

Code : PHP
1
2
3
4
5
6
7
8
9
<?php
$nombre_de_lignes = 1;

while ($nombre_de_lignes <= 100)
{
    echo 'Je ne dois pas regarder les mouches voler quand j\'apprends le PHP.<br />';
    $nombre_de_lignes++; // $nombre_de_lignes = $nombre_de_lignes + 1
}
?>


La boucle pose la condition : TANT QUE $nombre_de_lignes est inférieur ou égal à 100
Dans cette boucle, il y a 2 instructions :
  • Le echo, qui permet d'afficher du texte en PHP. A noter qu'il y a une balise HTML <br /> à la fin : cela permet d'aller à la ligne. Vu que vous connaissez le HTML, ça n'a rien de surprenant : chaque phrase sera écrite sur une seule ligne.
  • Une instruction bizarre ensuite : $nombre_de_lignes++; Késako ? Regardez mon commentaire : c'est exactement la même chose. En fait, c'est une façon plus courte d'ajouter 1 à la variable. On appelle cela l'incrémentation (ce nom barbare signifie tout simplement que l'on a ajouté 1 à la variable :p ).

A chaque fois qu'on fait une boucle, la valeur de la variable augmente : 1, 2, 3, 4... 98, 99... Dès que la variable a atteint 100 puis qu'elle passe à 101, la boucle s'arrête sans afficher l'echo. Et voilà, on a écrit 100 lignes en un clin d'oeil :)
Et si la punition avait été plus grosse, pas de problème ! Il suffirait de changer la condition (par exemple mettre "TANT que c'est inférieur à 500" pour l'écrire 500 fois).

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

Nous venons donc de voir comment afficher une phrase plusieurs centaines de fois sans efforts.

Mais est-ce vraiment utile ? On n'a pas besoin de faire ça sur un site web ?!


Pas vraiment, mais comme je vous l'ai dit en introduction, nous apprenons ici des techniques de base que l'on va pouvoir réutiliser dans les prochains chapitres de ce cours. Imaginez à la fin que ce système de boucle va vous permettre de demander à PHP d'afficher d'une seule traite tous les messages de votre forum. Bien sûr, il vous faudra d'autres connaissances pour y parvenir, mais sans les boucles vous n'auriez rien pu faire !

Je vous demande pour le moment de pratiquer et de comprendre comment ça marche.

Bon, un autre exemple pour le fun ?
On peut écrire de la même manière une centaine de lignes, mais chacune peut être différente (on n'est pas obligés d'écrire la même chose à chaque fois).
Cet exemple devrait vous montrer que la valeur de la variable augmente à chaque passage dans la boucle :

Code : PHP
1
2
3
4
5
6
7
8
9
<?php
$nombre_de_lignes = 1;

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


Voilà, c'est tout bête, et cet exemple ressemble beaucoup au précédent. La particularité là, c'est qu'on affiche à chaque fois la valeur de $nombre_de_lignes (ça vous permet de voir que sa valeur augmente petit à petit).

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 réouvrir 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.

Une boucle plus complexe : For

Mais non, n'ayez pas peur voyons. :p
Il ne vous arrivera rien de mal, le mot "complexe" ne veut pas dire ici "compliqué".

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

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'un peut paraître plus adapté que l'autre dans certains cas, cela dépend aussi des goûts.

Alors, comment ça marche un for ? Ca ressemble beaucoup au while, mais c'est la première ligne qui est un peu particulière. 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 :

Code : PHP
1
2
3
4
5
6
<?php
for ($nombre_de_lignes = 1; $nombre_de_lignes <= 100; $nombre_de_lignes++)
{
echo 'Ceci est la ligne n°' . $nombre_de_lignes . '<br />';
}
?>


Que de choses dans une même ligne ! o_O

Bon, vous vous en doutez, je ne vais vous expliquer que la ligne du for, le reste n'a pas changé.

Après le mot for, il y a des parenthèses (si si je vous jure ! :lol: )
Dans ces parenthèses, il y a 3 éléments, séparés par des point-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, la boucle s'arrête.
  • 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 boucle 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 !

Q.C.M.

Une boucle s'arrête...
Combien de fois cette boucle sera-t-elle exécutée ?Code : PHP
1
2
3
4
5
6
7
8
9
<?php
$boucle = 10;

while ($boucle > 0)
{
    // Instructions
    $boucle = $boucle - 2;
}
?>
Que se serait-il passé dans le code précédent si on avait mis un >= au lieu du symbole > ?
Que signifie $variable++; ?
Allez, on va pas faire 50 questions identiques, on finit par un truc tordu, si vous trouvez c'est que vous avez tout compris ;o)
Combien de fois le message est-il affiché ?
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$message = 'Je me répète là, non ?';

for ($boucle1 = 1; $boucle1 <= 20; $boucle1++)
{
    for ($boucle2 = 1; $boucle2 <= 10; $boucle2++)
    {
        echo $message;
    }
}
?>

Statistiques de réponses au QCM

Croyez-moi, les boucles vont vraiment nous faire gagner un temps fou !
Grâce à elles, il y a des scripts PHP que l'on peut écrire en quelques lignes de code et qui pourtant effectuent beaucoup de calculs !

Vous aurez en particulier l'occasion de vous servir des boucles lorsque vous attaquerez l'étude de la base de données un peu plus loin dans ce cours.
Chapitre précédent Sommaire Chapitre suivant

Partager

40 commentaires pour "Les boucles"
Note moyenne : 3.61 / 4 (2518 votes)
Pseudo Commentaire
Hors ligne OriginalsGeeks # Posté le 05/04/2011 à 12:55:23
Avatar

Avis : Très bon

Si je me souviens bien c'est parce que la boucle s'exécute au moins un fois sans que tu le vois se qui fait 1 fois + les 10 autres que tu fais après sa fait 11 .
Hors ligne OriginalsGeeks # Posté le 05/04/2011 à 13:00:58
Avatar

Avis : Très bon

@Carbuncle

Ton code serai mieux comme sa :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
$boucle2 = 1;

while ($boucle2 <= 5)
{
echo 'haaaaaaaaaaaaaaaaaaaaaaaa';
?>
<br/>
<?php
$boucle2++;
}
?>


ou comme sa :

Code : PHP
1
2
3
4
5
6
7
8
9
<?php
$boucle2 = 1;

while ($boucle2 <= 5)
{
echo "haaaaaaaaaaaaaaaaaaaaaaaa".'<br/>';
$boucle2++;
}
?>


ou encore comme sa :

Code : PHP
1
2
3
4
5
6
7
8
9
<?php
$boucle2 = 1;

while ($boucle2 <= 5)
{
echo 'haaaaaaaaaaaaaaaaaaaaaaaa'.'<br/>';
$boucle2++;
}
?>


A toi de choisir .
Hors ligne makse # Posté le 18/08/2011 à 05:39:49

j'ai copié ce code pour un teste
Code : PHP
1
2
3
4
5
6
7
8
9
<?php
   $nombre_de_lignes = 1;

while ($nombre_de_lignes <= 100)
{
    echo 'Je ne dois pas regarder les mouches voler quand j\'apprends le PHP.<br />';
    $nombre_de_lignes++;
}
?>

Je l’ai bien enregistrer au bon endroit mais lorsque que je l'ouvre tout ce que ça affiche c'est;

'; $nombre_de_lignes++; } ?>
Hors ligne makse # Posté le 18/08/2011 à 23:18:11

Désolé... problème réglé...
Hors ligne XxKillerKrocxX # Posté le 21/02/2012 à 02:07:21
Avatar

Pour ton souci V13GAS fait comme ceci,
sa fait un peu bricolage mais sa fonctionne.
Code : PHP
1
2
3
4
5
6
7
8
<?php
for ($nombre_de_lignes = 1; $nombre_de_lignes < 10; $nombre_de_lignes++)
{
	echo 'Ceci est la ligne n°' . $nombre_de_lignes . '<br />';
}
echo 'Ceci est la ligne n°' . $nombre_de_lignes . '<br />';
echo 'Il y a au total ' . $nombre_de_lignes . ' lignes.<br />';
?>

Voir tous les commentaires