Cours ⇒ Cour PHP facebook twitter youtube

Les instructions de contrôle ⇒ & Les instructions de boucle



Les boucles permettent de répéter des opérations élémentaires un grand nombre de
fois sans avoir à réécrire le même code. Selon l'instruction de boucle utilisée, le
nombre d'itérations peut être défini à l'avance ou être déterminé par une condition
particulière.

La boucle for

Exemple 3-5. Une boucle for simple

<?php
for($i=1;$i<7;$i++)
{
echo "<h$i> $i :Titre de niveau $i </h$i>";
}
?>

 

Le résultat de la boucle est illustré à la figure 3-1.

7astuses

Exemple 3-7. Les boucles for imbriquées

<?php
echo "<h2> Révisez votre table de multiplication!</ h2>";
//Début du tableau HTML

echo "<table border=\"2\" style=\"background-color:yellow\"> <th>
&nbsp;X &nbsp;</th>";
//Création de la première ligne
for($i=1;$i<10;$i++)
{
echo "<th>&nbsp;$i&nbsp;</th>";
}
//Fin de la boucle 1
//*****************************
//Création du corps de la table
//*****************************
//Boucles de création du contenu de la table
for($i=1;$i<10;$i++)
{
//Création de la première colonne
echo "<tr><th>&nbsp;$i&nbsp;</th>";
//Remplissage de la table
for($j=1;$j<10;$j++)
{
echo "<td style=\"background-color:red;color:white\"> &nbsp;&nbsp; <b>". $i*$j.
"&nbsp;&nbsp; </td>";
}
echo "</b></tr>";
}
echo "</table>"
?>

 

 

 

La boucle while

La boucle while permet, par exemple, d'afficher tous les résultats fournis après interrogation
d'une base de données, sans en connaître à l'avance le nombre exact. La syntaxe de
cette instruction est la suivante :
while(expression)
{
//Bloc d'instructions à répéter;
}
L'expression précisée doit pouvoir être évaluée de façon booléenne par PHP et pouvoir
changer de valeur au cours du script, faute de quoi la boucle serait infinie.
L'exemple suivant :
$a = "oui";
while ($a) {echo $a; }
constitue une boucle infinie, car $a est évaluée à TRUE en tant que chaîne non vide.
De même, dans le code suivant :
$a = 54;
while ($a>100) {echo $a; }
l'instruction echo $a n'est jamais exécutée car l'expression $a>100 contenue dans while
est toujours fausse.

Exemple 3-8. Tirage d'un multiple de 7 avec une boucle while

<?php
$n=1;
while($n%7!=0 )
{
$n = rand(1,100);
echo $n,"&nbsp; /";
}
?>

Vous obtenez, par exemple, la suite de nombres72 / 79 / 50 / 95 / 11 / 43 / 18 / 49 / (cette
suite varie évidemment à chaque tirage).

La boucle do...while

La boucle do...while apporte une précision à la boucle while. Dans celle-ci, en effet, si
l'expression booléenne est évaluée à FALSE, les instructions qu'elle contient ne sont
jamais exécutées. Avec l'instruction do...while, au contraire, la condition n'est évaluée
qu'après une première exécution des instructions du bloc compris entre do et while.


La syntaxe de la boucle do…while est la suivante

do {
//bloc d'instructions
}
while(expression);

Exemple 3-9. Tirage avec une boucle do…while

<?php
do
{
$n = rand(1,100);
echo $n,"&nbsp; / ";
}
while($n%7!=0);
?>

Les résultats obtenus sont similaires

La boucle foreach

l'instruction foreach permet de parcourir
rapidement l'ensemble des éléments d'un tableau, ce que fait aussi une boucle for, mais
foreach se révèle beaucoup plus efficace.
La boucle foreach est particulièrement efficace pour lister les tableaux associatifs dont il
n'est nécessaire de connaître ni le nombre d'éléments ni les clés. Sa syntaxe est variable
selon que vous souhaitez récupérer seulement les valeurs ou les valeurs et les clés (ou les
indices).
Pour lire les valeurs seules,

la première syntaxe est la suivante


foreach($tableau as $valeur)
{
//bloc utilisant la valeur de l'élément courant
}

La variable $valeur contient successivement chacune des valeurs du tableau. Il importe
cependant de ne pas utiliser un nom de variable existant, faute de quoi sa valeur est écrasée.
Les variables utilisées dans une boucle foreach ne sont pas locales à la boucle et gardent
donc la valeur du dernier élément lu dans tout le script.
Pour lire les valeurs et les clés (ou les indices),

la deuxième syntaxe est la suivante :

foreach($tableau as $cle=>$valeur)
{
//bloc utilisant la valeur et la clé de l'élément courant
}

Ici, la variable $cle contient successivement l'indice ou la clé de chacun des éléments du
tableau dans l'ordre numérique pour les tableaux indicés et dans l'ordre de création des
éléments pour les tableaux associatifs. La variable $valeur contient la valeur associée à la
clé ou à l'indice courant.
Dans ces deux cas, la variable $tableau peut être remplacée par une expression dont la
valeur est du type array, comme ce pourrait être le cas, par exemple, d'une fonction
retournant un tableau. Cette instruction est abondamment utilisée pour lire tous les résultats
obtenus après interrogation d'une base de données.

Exemple 3-10. Lecture des valeurs d'un tableau indicé

<?php
//Création du tableau de 9 éléments
for($i=0;$i<=8;$i++)
{
$tab[$i] = pow(2,$i);
}
$val ="Une valeur";
echo $val,"<br />";
//Lecture des valeurs du tableau
echo"Les puissances de 2 sont :";
foreach($tab as $val)
{echo $val." : ";}
?>

Le résultat suivant est affiché :
Les puissances de 2 sont :1 : 2 : 4 : 8 : 16 : 32 : 64 : 128 : 256:

Exemple 3-11. Lecture des indices et des valeurs

<?php
//Création du tableau
for($i=0;$i<=8;$i++)
{
$tab[$i] = pow(2,$i);
}
//Lecture des indices et des valeurs
foreach($tab as $ind=>$val)
{echo " 2 puissance $ind vaut $val <br />";}
echo "Dernier indice ",$ind, " ,dernière valeur ",$val;
?>

 

 

Exemple 3-12. Lecture des clés et des valeurs

<?php
//Création d'un tableau associatif
for($i=0;$i<=8;$i++)
{
$tabass["client".$i] = rand(100,1000);
}
//Lecture des clés et des valeurs
foreach($tabass as $cle=>$val)
{echo " Le client de login <b>$cle</b> a le code <b>$val</b><br />";}
?>

Sortie anticipée des boucles

Vous pouvez avoir besoin d'arrêter une boucle avant son terme normal. Pour cela, vous
disposez des instructions break et continue, qui permettent de réaliser un arrêt partiel ou
total.


L'instruction break

Il est possible d'arrêter complètement une boucle for, foreach ou while avant son terme
normal si une condition particulière est vérifiée, à l'aide de l'instruction break. Le script
n'est pas arrêté, comme avec l'instruction exit, et seule la boucle en cours se termine.
Si plusieurs boucles sont imbriquées, seule celle qui contient l'instruction break se
termine. Pour arrêter plusieurs boucles en même temps, on emploie la syntaxe suivante :
break n;
dans laquelle n désigne le nombre de boucles les plus internes que vous souhaitez fermer.
Celles de niveau supérieur à n continuent à s'exécuter normalement.

La notation $tab[$i][0]
La notation $tab[$i][0] permet de récupérer la première lettre de la chaîne de caractères contenue
dans la variable $tab[$i], $tab[$i][1] la deuxième lettre, et ainsi de suite.

 

La fonction count($tab)
La fonction count($tab) retourne le nombre d'éléments du tableau $tab, ce qui permet de connaître le
nombre maximal d'itération de la boucle. Cette expression pourrait être supprimée car c'est l'instruction
break qui met fin à la boucle. Il est toutefois préférable de l'utiliser pour arrêter la boucle, car si le tableau
ne contient aucun nom commençant par la lettre A, vous avez une boucle infinie, ce que le serveur
n'appréciera pas.

Exemple 3-13. L'instruction break

<?php
//Création d'un tableau de noms
$tab[1]="Amine";
$tab[2]="Ahmed";
$tab[3]="Marie";
$tab[4]="Dylant";
//Boucle de lecture du tableau
for($i=1;$i<count($tab);$i++)
{
if ($tab[$i][0]=="M")
{
echo "Le premier nom commençant par A est le n˚ $i: ",$tab[$i];
break;
}
}
?>

 

Le premier nom commençant par A est le n° 3: Marie

L'instruction continue

À la différence de l'instruction break, l'instruction continue n'arrête pas la boucle en
cours mais seulement l'itération en cours. La variable compteur est incrémentée immédiatement,
et toutes les instructions qui suivent le mot-clé continue ne sont pas exécutées lors
de l'itération en cours.
L'exemple 3-14 donne deux illustrations de ce mécanisme :
• La première utilise une boucle for pour afficher tous les nombres de 1 à 20, à l'exception
des multiples de 5 grâce au code if($i%5==0) { continue;} (repère 1).
• La deuxième utilise une boucle foreach qui parcourt un tableau de départements et
permet de n'afficher que ceux qui commencent par la lettre E (repère 2).

Exemple 3-14. Interruption partielle d'une boucle

<?php
//Interruption d'une boucle for
for($i=0;$i<20;$i++)
{
if($i%5==0) { continue;}
echo $i,"<br />";
}
//********************
//Interruption d'une boucle foreach
$tab[1]="Ain";
$tab[2]="Allier";
$tab[27]="Eure";
$tab[28]="Eure et Loir";
$tab[29]="Finistère";
$tab[33]="Gironde";
foreach($tab as $cle=>$valeur)
{
if($tab[$cle][0]!="E") { continue;}
echo "code $cle : département ",$tab[$cle],"<br />";
}
?>

Le résultat affiché par cet exemple est le suivant

 

Exemple 3-15. Interruption de plusieurs boucles

<?php
for ($i=0;$i<10;$i++)
{
for ($j=0;$j<10;$j++)
{
for ($k=0;$k<10;$k++)
{
if(($i+$j+$k)%3==0) continue 3;
echo "$i : $j : $k <br /> ";
}
}
}
?>

 


Changer le fond
Oregionale Skin
7astuces
Sélectionnez un Fond (11)
7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces
Fond de contenu
7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces 7astuces