PHP
4 introduit une commande foreach,
comme en Perl ou d'autres langages.
C'est un moyen simple de passer en
revue un tableau. Il y a deux syntaxes
possibles : la seconde est une extension
mineure mais pratique de la première.
Exemple - Instruction foreach
foreach(array_expression
as $value)
commandes
foreach(array_expression as $key =>
$value)
commandes
La première forme passe en
revue le tableau array_expression.
À chaque itération,
la valeur de l'élément
courant est assignée à
$value et le pointeur interne de tableau
est avancé d'un élément
(ce qui fait qu'à la prochaine
itération, on accédera
à l'élément suivant).
La deuxième forme fait exactement
la même chose, mais c'est la
clé de l'élément
courant qui est assigné à
la variable $key.
Depuis PHP 5, il est possible d'
itérer également des
objets.
Note : Lorsque foreach démarre,
le pointeur interne de fichier est
automatiquement ramené au premier
élément du tableau.
Cela signifie que vous n'aurez pas
à faire appel à reset()
avant foreach.
Note : Bien que le tableau soit
référencé, foreach
travaille sur une copie du tableau
spécifié, et pas sur
le tableau lui-même. Par conséquent,
le pointeur de tableau n'est pas modifié,
comme il le serait avec le fonction
each(), et les modifications faites
dans le tableau ne seront pas prises
en compte dans le tableau original.
Cependant, le pointeur interne du
tableau original est avancé
avec le traitement du tableau. En
supposant sur la boucle foreach effectue
tout le traitement, le pointeur interne
du tableau sera à la fin du
tableau.
Depuis PHP 5, vous pouvez facilement
modifier les éléments
d'un tableau en faisant précéder
la valeur $value avec &. Ceci
aura pour effet d'assigner par référence
au lieu de copier la valeur.
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr vaut maintenant array(2, 4,
6, 8)
?>
Ceci n'est possible que si le tableau
itéré peut être
réféencé (i.e.
est une variable).
Note : foreach n'accepte pas l'opérateur
de suppression des erreurs @.
Vous pouvez remarquer que les exemples
suivants fonctionnent de manière
identique :
Exemple 16-17. Instruction
foreach et while
<?php
$arr = array("un", "deux",
"trois");
reset($arr);
while (list(, $value) = each($arr))
{
echo "Valeur : $value<br />\n";
}
foreach ($arr as $value) {
echo "Valeur : $value<br />\n";
}
?>
Les exemples suivants sont aussi fonctionnellement
identiques :
Exemple - Instruction foreachet
while(2)
<?php
$arr = array("un", "deux",
"trois");
reset($arr);
while (list($key, $value) = each($arr))
{
echo "Clé : $key; Valeur
: $value<br />\n";
}
foreach ($arr as $key => $value)
{
echo "Clé : $key; Valeur
: $value<br />\n";
}
?>
Voici quelques exemples de plus :
Exemple - Instruction foreach
et while(3)
<?php
/* exemple foreach 1 : la valeur seulement
*/
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Current value of \$a :
$v.\n";
}
/* exemple foreach 2 : la valeur et
sa clé d'index */
$a = array(1, 2, 3, 17);
$i = 0; /* uniquement pour l'illustration
*/
foreach ($a as $v) {
echo "\$a[$i] => $v.\n";
$i++;
}
/* exemple foreach 3 : la clé
et la valeur */
$a = array (
"un" => 1,
"deux" => 2,
"trois" => 3,
"dix-sept" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}
/* exemple foreach 4 : tableaux multi-dimensionnels
*/
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
echo "$v2\n";
}
}
/* exemple foreach 5 : tableaux dynamiques
*/
foreach (array(1, 2, 3, 4, 5) as $v)
{
echo "$v\n";
}
?>
Copyright © 2001-2006 The
PHP Group. All rights reserved.
|