Boucle foreach

foreach se décline en deux versions

Version 1 avec un tableau indicé

1
1
2
3
5
8
13

Ainsi, nous parcourons le tableau $array et la valeur de l'élément courant est copié dans $value, qui est ensuite affiché.

<?php
$array = array( 1, 1, 2, 3, 5, 8, 13 );
foreach( $array as $value )
echo $value . '<br />';
?>

Version 1 avec un tableau associatif

N° 1
N° 2
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

<?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
?>

Version 2

La deuxième version de foreach permet de connaître, en plus de la valeur de l'élément courant, sa clé
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

Exemple 1:

Cet élément a pour clé "premier" et pour valeur "N° 1"
Cet élément a pour clé "deuxieme" et pour valeur "N° 2"
Cet élément a pour clé "troisieme" et pour valeur "N° 3"
<?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 />';
?>

Exemple 2:

$_SERVER[DOCUMENT_ROOT]=/home/conseilw/www
$_SERVER[GATEWAY_INTERFACE]=CGI/1.1
$_SERVER[HTTP_ACCEPT]=text/html,application/xhtml+xml,text/xml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
$_SERVER[HTTP_ACCEPT_CHARSET]=ISO-8859-1,utf-8;q=0.7,*;q=0.7
$_SERVER[HTTP_ACCEPT_ENCODING]=gzip
$_SERVER[HTTP_ACCEPT_LANGUAGE]=en-us,en;q=0.5
$_SERVER[HTTP_CACHE_CONTROL]=no-cache
$_SERVER[HTTP_CONNECTION]=close
$_SERVER[HTTP_HOST]=www.conseil-webmaster.com
$_SERVER[HTTP_PRAGMA]=no-cache
$_SERVER[HTTP_USER_AGENT]=CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
$_SERVER[HTTP_X_CC_ID]=ccc03-01
$_SERVER[PATH]=/bin:/usr/bin
$_SERVER[QUERY_STRING]=
$_SERVER[REDIRECT_STATUS]=200
$_SERVER[REMOTE_ADDR]=38.107.191.103
$_SERVER[REMOTE_PORT]=22420
$_SERVER[REQUEST_METHOD]=GET
$_SERVER[REQUEST_URI]=/formation/php/tableaux/array04.php
$_SERVER[SCRIPT_FILENAME]=/home/conseilw/www/formation/php/tableaux/array04.php
$_SERVER[SCRIPT_NAME]=/formation/php/tableaux/array04.php
$_SERVER[SERVER_ADDR]=91.121.65.131
$_SERVER[SERVER_ADMIN]=webmaster@conseil-webmaster.com
$_SERVER[SERVER_NAME]=www.conseil-webmaster.com
$_SERVER[SERVER_PORT]=80
$_SERVER[SERVER_PROTOCOL]=HTTP/1.1
$_SERVER[SERVER_SIGNATURE]=
Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8g Server at www.conseil-webmaster.com Port 80

$_SERVER[SERVER_SOFTWARE]=Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8g
$_SERVER[PHP_SELF]=/formation/php/tableaux/array04.php
$_SERVER[REQUEST_TIME]=1283668745
$_SERVER[argv]=Array
$_SERVER[argc]=0
<?php
foreach($_SERVER as $key => $value )
echo '$_SERVER[' .$key .']=' .$value .'<br />';
?>

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

Exemple 4:

On peut aussi imbriquer des boucles foreach, regardez comment on peut ainsi afficher le contenu d'un tableau à deux dimensions:

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

fruits:
pommes
tomates
abricots

animaux:
chats
chiens

pays:
Suisse
France
Angleterre

<?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 />';
}
?>