• 8 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

Ce cours existe en livre papier.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 02/11/2021

Affichez une liste de recettes à l'aide des boucles

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Dans notre site de partage de recettes de cuisine, vous aurez sûrement envie de donner la possibilité à vos utilisateurs de commenter les recettes.

Pour cela, nous allons utiliser des tableaux.

Quoi ? Je croyais qu'on allait parler des boucles dans ce chapitre…

Les tableaux sont des structures capables de conserver en mémoire plusieurs éléments. Et c'est ensuite grâce aux boucles que nous allons pouvoir :

  1. Parcourir les différentes recettes.

  2. Les afficher à l'aide du langage HTML.

À la fin de ce chapitre, non seulement vous saurez parcourir une liste d'éléments, mais vous aurez également commencé à construire pour de bon votre application.

Utilisez un tableau pour lister des éléments

Reprenons notre projet là où nous l'avions laissé au chapitre précédent.

Nous avons :

  • des utilisateurs ;

  • des recettes ;

  • et peut-être des commentaires.

Avec les connaissances que vous avez pour le moment, voici comment vous pourriez définir deux utilisateurs :

<?php
// Premier utilisateur
$userName1 = 'Mickaël Andrieu';
$userEmail1 = 'mickael.andrieu@exemple.com';
$userPassword1 = 'S3cr3t';
$userAge1 = 34;
// Deuxième utilisatrice
$userName2 = 'Laurène Castor';
$userEmail2 = 'laurene.castor@exemple.com';
$userPassword2 = 'P4ssW0rD';
$userAge2 = 28;
// ... et ainsi de suite pour les autres utilisateurs.

Pour afficher ces utilisateurs (ou même des recettes), je vais devoir créer des variables pour chacun des éléments qui constituent mes objets ?

Non, heureusement !

Par exemple, voici un premier tableau :

<?php
$user1 = ['Mickaël Andrieu', 'email', 'S3cr3t', 34];
echo $user1[0]; // "Mickaël Andrieu"
echo $user1[1]; // "email"
echo $user1[3]; // 34

Notez pour le moment que :

  • un tableau se déclare entre crochets : [ ] ;

  • il possède des indices : 0, 1, 2, … ;

  • on peut accéder à un élément du tableau à partir de ces clés.

Mais la puissance des tableaux ne s'arrête pas là !

Vous pouvez construire des tableaux de tableaux :

<?php
$mickael = ['Mickaël Andrieu', 'mickael.andrieu@exemple.com', 'S3cr3t', 34];
$mathieu = ['Mathieu Nebra', 'mathieu.nebra@exemple.com', 'devine', 33];
$laurene = ['Laurène Castor', 'laurene.castor@exemple.com', 'P4ssw0rD', 28];
$users = [$mickael, $mathieu, $laurene];
echo $users[1][1]; // "mathieu.nebra@exemple.com"

Maintenant, comment boucler sur cette liste d'utilisateurs (ou de recettes) pour afficher les recettes ?

C'est exactement ce que nous allons voir maintenant !

Utilisez une boucle simple :  while

Attendez mais on n'a même pas vu ce qu'était une boucle, à quoi ça sert ?

On peut, si vous voulez, présenter le principe avec le schéma suivant :

Le schéma montre le fonctionnement d'une boucle : les instructions sont exécutées dans l'ordre, de haut en bas. À la fin, on retourne à la première et on recommence.
Principe de fonctionnement d'une boucle

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.

  2. À la fin des instructions, on retourne à la première.

  3. On recommence à lire les instructions dans l'ordre.

  4. Et on retourne à la première, etc.

Voici comment faire avec une boucle simple :  while  . 

<?php
while ($isValid) {
// instructions à exécuter dans la boucle
}
?>

Ici, on demande à PHP :

TANT QUE $isValid est vrai, exécuter ces instructions.

Mais bon, là je ne vous apprends rien, vous commencez à avoir l'habitude de voir des accolades partout. 🤓

Et voilà, il n'y a guère plus de choses à savoir. Cependant, je vais quand même vous montrer un ou deux exemples d'utilisation de boucles, pour que vous voyiez à quoi ça peut servir.

Pour notre premier exemple, on va supposer que vous avez été puni 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 heures… Avec PHP, on va faire ça en un clin d'œil !

Regardez ce code :

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

Ce qui affiche... un grand nombre de lignes :

Capture d'écran des lignes affichées grâce à une boucle PHP. On peut lire la phrase
Des lignes affichées grâce à une boucle PHP

La boucle pose la condition :

TANT QUE $lines est inférieur ou égal à 100.

Dans cette boucle, il y a deux instructions :

  1. echo permet d'afficher du texte en PHP. À 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).

  2. $lines++; 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).

Chaque fois qu'on fait une boucle, la valeur de la variable augmente : 1, 2, 3, 4… 99, 100…

Dès que la variable atteint 101, on arrête la boucle.

Et voilà, on a écrit 100 lignes en un clin d'œil.

Si la punition avait été plus grosse, pas de problème ! Il aurait suffi de changer la condition, par exemple : mettre « TANT QUE c'est inférieur ou égal à 500 » pour l'écrire 500 fois.

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

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

Pas vraiment, mais nous apprenons ici des techniques de base que l'on va pouvoir réutiliser plus tard dans 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 plaisir ?

On peut écrire de la même manière une centaine de lignes, mais chacune peut être différente : on n'est pas obligé 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 :

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

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  $lines  .

Cela vous permet de voir que sa valeur augmente petit à petit.

D'accord, mais pour un tableau de tableaux : comment on fait alors ?

On va l'aborder en détail dans le chapitre suivant ; en attendant, voici le code fonctionnel :

<?php
$lines = 3; // nombre d'utilisateurs dans le tableau
$counter = 0;
while ($counter < $lines) {
echo $users[$counter][0] . ' ' . $users[$counter][1] . '<br />';
$counter++; // Ne surtout pas oublier la condition de sortie !
}

Pour le résultat suivant :

On voit la liste des utilisateurs et leurs emails avec une boucle while : Mickaël Andrieu, Mathieu Nebra et Laurène Castor
Liste des utilisateurs avec une boucle while

Découvrez une boucle plus complexe :  for

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

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.

Pour voir la différence avec le while , reprenons l'exemple précédent, cette fois avec un for :

<?php
for ($lines = 0; $lines <= 2; $lines++)
{
echo $users[$lines][0] . ' ' . $users[$lines][1] . '<br />';
}
?>

Que de choses dans une même ligne !

Bon, vous vous en doutez : je vais vous analyser la ligne du for uniquement (le reste n'a pas changé).

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

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

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

  3. Enfin, le troisième c'est l'incrémentation. Cela 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 il rassemble sur une seule ligne tout ce qu'il faut savoir sur le fonctionnement de la boucle.

Comment savoir lequel choisir ? while  ou for ?

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 .

Affichez des recettes

Reprenons ce que nous avions dit sur les recettes.

Une recette, c'est :

  • un titre ;

  • un auteur ;

  • un statut activé ;

  • et des instructions (la recette à suivre).

Le code de votre application à ce stade pourrait être le suivant (avec des recettes d'exemple, bien sûr) :

<?php
// Déclaration du tableau des recettes
$recipes = [
['Cassoulet','[...]','mickael.andrieu@exemple.com',true,],
['Couscous','[...]','mickael.andrieu@exemple.com',false,],
];
?>
<!DOCTYPE html>
<html>
<head>
<title>Affichage des recettes</title>
</head>
<body>
<ul>
<?php for ($lines = 0; $lines <= 1; $lines++): ?>
<li><?php echo $recipes[$lines][0] . ' (' . $recipes[$lines][2] . ')'; ?></li>
<?php endfor; ?>
</ul>
</body>
</html>

Pour le rendu suivant :

Affichage de nos recettes : version 0 !
Affichage de nos recettes : version 0 !

Ah ! En HTML, on peut utiliser la boucle  for  comme une boucle  if  : je reconnais l'astuce avec  endif;  et  endfor;  , c'est bien ça ?

Tout à fait, comme vous pouvez le voir, c'est assez pratique !

On peut combiner les boucles et les conditions ? Au final, on a affiché aussi la recette "Couscous" alors que le statut d'affichage est à "faux"… 

Oui, mais nous verrons cela dans le prochain chapitre !

En résumé

  • Les boucles demandent à PHP de répéter des instructions plusieurs fois.

  • Les deux principaux types de boucles sont :

    • while : à utiliser de préférence lorsqu'on ne sait pas par avance combien de fois la boucle doit être répétée ;

    • for  : à utiliser lorsqu'on veut répéter des instructions un nombre précis de fois.

  • L'incrémentation est une technique qui consiste à ajouter 1 à la valeur d'une variable. La décrémentation retire au contraire 1 à cette variable. On trouve souvent des incrémentations au sein de boucles for  .

Ce chapitre était important et il vous a été utile pour faire afficher des informations sur notre site. Maintenant, nous allons voir comment organiser nos données grâce aux tableaux.

Exemple de certificat de réussite
Exemple de certificat de réussite