Maison  >  Article  >  développement back-end  >  PHP : Exemple d'analyse de deux extensions de syntaxe de foreach

PHP : Exemple d'analyse de deux extensions de syntaxe de foreach

伊谢尔伦
伊谢尔伦original
2017-06-23 14:57:221076parcourir

1 Introduction à la syntaxe de foreach

Les versions de PHP 4 et supérieures incluent la structure foreach, qui est juste une méthode pratique pour parcourir un tableau. foreach ne peut être utilisé que sur des tableaux, et une erreur se produira lorsque vous tenterez de l'utiliser sur d'autres types de données ou sur une variable non initialisée. Il existe deux syntaxes, la seconde est une extension utile de la première.

foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement

Le premier format traverse le tableau array_expression donné. À chaque passage dans la boucle, la valeur de la cellule actuelle est affectée à $value et le pointeur à l'intérieur du tableau est avancé d'un pas (la cellule suivante sera donc obtenue dans la boucle suivante).

Le deuxième format fait la même chose, sauf qu'en plus de la valeur de la cellule courante, la valeur de la clé sera également affectée à la variable $key dans chaque boucle. Regardez le code suivant :

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
  echo $key."=>".$value."\n";
}
结果如下:
1=>111
2=>222
3=>333

La valeur clé ici peut être comprise comme l'indice du tableau. L'indice de l'élément du tableau a[2] est 2.

Quand foreach commence à. exécuter, l'intérieur du tableau Le pointeur pointe automatiquement vers la première cellule. Cela signifie qu'il n'est pas nécessaire d'appeler reset() avant la boucle foreach. Et la boucle while doit être réinitialisée. Les deux codes ci-dessous fonctionnent exactement de la même manière.

1. Utiliser la boucle while

$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}

2. Utiliser foreach

foreach ($arr as $value) {
echo "Value: $value<br>\n";
}

De plus, notez que foreach exploite une copie du tableau spécifié, et pas le tableau lui-même. Par conséquent, même avec la construction de each(), le pointeur de tableau d'origine n'a pas changé et la valeur de l'unité du tableau n'a pas été affectée.
foreach ne prend pas en charge la possibilité d'utiliser "@" pour supprimer les messages d'erreur.

Résumé 2 PHP foreach

1. L'utilisation de références dans foreach.

Dans des circonstances normales, $arr et $value dans foreach($arr as $value) sont des copies et ne sont pas affectés par des facteurs externes, c'est-à-dire

$arr = array(0,1,2,3,4,5);
 
foreach($arr as $value){
 
    $arr = array();
 
    echo $value;
 
}

Le résultat est : 12345

Mais si $arr est une référence, la situation est différente Nous utilisons du code pour illustrer le problème

$arr = array(0,1,2,3,4,5);
 
$arr = &$arr;
 
foreach($arr as $value){
 
    $arr = array();
 
    echo $value;
 
}

Le résultat est : 0

C'est parce que. $arr est utilisé dans la boucle. Il pointe directement vers les données originales, plutôt que d'en faire une copie.

Si $value est une référence et $arr n'est pas une référence, le résultat est le même, $value pointe vers les données d'origine au lieu de copier

$arr = array(0,1,2,3,4,5);
 
foreach($arr as &$value){
 
    $arr = array();
 
    echo $value;
 
}

Le résultat est. : 0

Il existe une autre situation particulière, c'est-à-dire que si $arr est défini comme une variable globale, $arr deviendra également une référence

global $arr;
 
$arr = array(0,1,2,3,4,5);
 
foreach($arr as $value){
 
    $arr = array();
 
    echo $value;
 
}

Le résultat est : 0

2 . Si vous bouclez un tableau deux fois, vous ne devez pas écrire

foreach($arr as &$value){} 
foreach($arr as $value){}

comme ça, cela entraînerait un résultat incorrect de la deuxième boucle (c'est peut-être un bug PHP). Vous pouvez utiliser ce qui suit à la place :

//solution 1
 
foreach($arr as &$value){}
 
unset($value);
 
foreach($arr as $value){}
 
//solution 2
 
foreach($arr as &$value){}
 
foreach($arr as &$value){}
 
//solution 3
 
foreach($arr as &$value){}
 
$arr2 = $arr;
 
foreach($arr2 as $value){}

3. Pour éviter que foreach ne soit indéfini, essayez d'écrire foreach comme ceci

foreach((array)$arr as $value) {}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn