La boucle Foreach
Pour commencer, reprenons le joli tableau que nous avions défini précédemment:
.01 .02
| |
<?php
$array = array( 1, 1, 2, 3, 5, 8, 13 );
?>
|
Comme nous l'avons vu, nous pouvons le parcourir à l'aide d'un count (qui donne le nombre d'éléments) et d'une boucle for, mais nous pouvons aussi le faire avec foreach. Foreach se décline en deux versions, examinons d'abord la première:
.01 .02
| |
<?php
foreach( $array as $value )
echo $value . '<br />';
?>
|
Ainsi, nous parcourons le tableau $array et la valeur de l'élément courant est copié dans $value, qui est ensuite affiché. Vous ne voyez sûrement aucun avantage à utiliser foreach à la place de for. Mais étudions le cas d'un nouveau tableau:
.01 .02
| |
<?php
$array = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3');
?>
|
Contrairement au tableau précédant, les indices des éléments ne sont pas des nombres (0, 1, 2, ...) mais des chaînes de caractères (on appelle un tel tableau un tableau associatif). Ainsi, si je veux accéder au deuxième élément, je dois procéder comme suit: $array['deuxieme'] . Il est donc impossible ici d'utiliser for. Par contre, avec foreach, aucun problème:
.01 .02
| |
<?php
$array = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3');
foreach( $array as $value ) // on parcourt $array, la valeur de l'item courant est copiée dans $value
echo $value . '<br />'; // affichage
?>
Affiche:
N° 1
N° 2
N° 3
|
La seconde version de foreach permet de connaître, en plus de la valeur de l'élément courant, sa clé:
.01 .02
| |
<?php
$array = array( 'premier' => 'N° 1', 'deuxieme' => 'N° 2', 'troisieme' => 'N° 3');
foreach( $array as $key => $value )
echo 'Cet élément a pour clé "' . $key . '" et pour valeur "' . $value . '"<br />';
?>
|
Dans ce cas, on parcourt le tableau $array et la clé de l'élément courant est copiée dans $key tandis que sa valeur est copiée dans $value!
Cette boucle pourrait nous permettre d'afficher tous les élément du tableau superglobal $_SERVER:
.01 .02
| |
<?php
foreach( $_SERVER as $key => $value )
echo '$_SERVER['' . $key . ''] =' . $value . '<br />';
?>
Affiche:
$_SERVER['HTTP_HOST'] =localhost
$_SERVER['HTTP_USER_AGENT'] =Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
$_SERVER['HTTP_ACCEPT'] =text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
$_SERVER['HTTP_ACCEPT_LANGUAGE'] =fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
$_SERVER['HTTP_ACCEPT_ENCODING'] =gzip,deflate
$_SERVER['HTTP_ACCEPT_CHARSET'] =ISO-8859-1,utf-8;q=0.7,*;q=0.7
$_SERVER['HTTP_KEEP_ALIVE'] =300
...
|
Vous remarquerez que l'on ne met pas les [ ] de $_SERVER! Retenez cet exemple de code, il vous permettra un jour d'afficher le contenu de $_POST, $_GET ou encore $_SESSION, ce qui peut parfois s'avérer très utile pour déceler un bug ou une valeur incorrecte dans un script :) .
On peut aussi imbriquer des boucles foreach, regardez comment on peut ainsi afficher le contenu d'un tableau à deux dimensions :
.01 .02
| |
<?php
$array = array( 'fruits' => array( 'pommes', 'tomates', 'abricots' ),
'animaux' => array( 'chats', 'chiens' ),
'pays' => array( 'Suisse', 'France', 'Angleterre' ) );
foreach( $array as $key => $value )
{
echo $key . ': <br />';
foreach( $value as $valeur )
echo ' ' . $valeur . '<br />';
echo '<br />';
}
?>
Affiche:
fruits:
pommes
tomates
abricots
animaux:
chats
chiens
pays:
Suisse
France
Angleterre
|
Le premier foreach parcourt le tableau principal, les valeurs de $key sont successivement 'fruits', 'animaux' et 'pays' tandis que $value contient le tableau qui contient les exemples, c'est donc $value que l'on prend comme tableau pour le deuxième foreach!