Les boucles

Plusieurs types de boucles :

  • while
  • do-while
  • for
  • foreach

While - do-while

// « while »
                    while (<condition>) {
                            <instructions>;
                    }

    //« do-while »
                    do {
                            <instructions>;
                    } while (<condition>)

L’instruction while correspond à un tant que… Attention à la condition de sortie et à l’incrémentation du compteur éventuel !!! L’instruction do-while est particulière, le premier test de sortie de la boucle n’est ici réalisé qu’après une première exécution de la boucle.

<?php

$i=0;
while ( $i <= 10) {
	echo $i . "<br>";
	$i++;
}

echo '<hr>';

$j=0;
do {
	echo $j . "<br>";
	$j++;
} while ($j < 0);

For

//« for »
                for (<expr1>; <condition>; <expr2>) {
                        <instructions>;
                }

L’instruction « for » comporte trois paramètres :

  • <expr1> : est l’instruction qui est exécutée une fois à l’entrée de la boucle pour l’initialiser;
  • <condition> : est l’expression booléenne qui est testée avant de (re-)passer dans la boucle
  • <expr2> : est l’instruction qui est exécutée à la fin de chaque passage dans la boucle. Souvent, on y incrémente le compteur.
<?php

for($i=0;$i<=10;$i++)
	echo $i . '. <br />';

Foreach

//« foreach »
                foreach ($array as $element) {
                        <instructions>;
                }

La commande « foreach » est un moyen simple de parcourir un à un les éléments d’un tableau. Deux syntaxes sont possibles.

Dans cette première syntaxe, il s’agit de parcourir le tableau $array. A chaque itération, l’élément courant est assigné à la variable $element, et le pointeur interne de tableau est avancé d’une position (à la prochaine itération, on accédera à l’élément suivant).

<?php

for($i=0;$i<=10;$i++)
	echo $i . '. <br />';
//« foreach » Syntaxe 2 :
                foreach ($array as $key=>$element) {
                        <instructions>;
                }
<?php

$tableau = array(2, 4, 6, 8, "chien", 'chat', 10);

foreach ($tableau as $elt) {
	echo $elt . "<br>";
}
<?php
$livre = array(
		"titre" => "Le Banquet",
		"auteur" => 'Platon',
		"origine" => "Grèce",
		"type" => "philosophie");
	
foreach ($livre as $clef => $valeur) {
	echo $clef . " : " . $valeur . "<br>";
}

foreach, travaille sur une « copie » du tableau

Depuis PHP5, possible d’attaquer le tableau lui-même, en utilisant le « & »

<?php

$tab = array(1, 2, 3);

foreach($tab as $valeur) {
	$valeur = $valeur - 1;
}

echo $tab[0] + $tab[1] + $tab[2]; // affiche 6

foreach($tab as &$valeur) {
	$valeur = $valeur - 1;
}

echo $tab[0] + $tab[1] + $tab[2]; // affiche 3

?>

Break et continue

Break :

  • Permet d’interrompre une boucle ou un switch
  • Break peut prendre un argument numérique pour indiquer combien de structures emboîtées ont été interrompues

Continue :

  • Permet d’accéder directement à l’itération suivante de la boucle, en sautant les instructions de fin
  • Continue peut prendre un argument numérique pour indiquer combien de structures emboîtées ont été ignorées

Exercices

  • Annotations
    En PHP, écrivez un script qui permette dafficher, dans une page web, le contenu de votre « documentroot »
    NB : voici quelques fonctions utiles :
     * $pointeur = opendir("nom répertoire") : retourne un pointeur sur un dossier
     * $nomFichier = readdir($pointeur) : retourne le nom du fichier suivant dans le dossier identifié par le pointeur.
     * closedir($pointeur) : ferme le pointeur
     * $_SERVER
    
  • PHP
    <?php
    $dir = opendir($_SERVER['DOCUMENT_ROOT']) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
            while($element = readdir($dir)) {
                    if($element != '.' && $element != '..') {
    
                            echo $element."<br />";
                    }
            }
    
            closedir($dir);
    
    
    
            /**
            * Version Oo avec les classes de la SPL
            */
    
            foreach (new DirectoryIterator($_SERVER['DOCUMENT_ROOT']) as $fileInfo) {
                    /**
                     * isDot() vérifie le . et ..
                     */
                    if(!$fileInfo->isDot()){
    
                            echo $fileInfo->getFilename() . "<br>\n";
                    }
            }
    

Table des Matières

Sujet précédent

Les structures de contrôle

Sujet suivant

Les fonctions

Cette page