"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value)"/> "111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value)">

Maison  >  Article  >  développement back-end  >  Analyse des problèmes découlant de la référence foreach en php

Analyse des problèmes découlant de la référence foreach en php

伊谢尔伦
伊谢尔伦original
2017-06-23 15:12:281143parcourir

1, foreach est la sortie loop de PHP pour array.

Exemple :

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

Le résultat est le suivant :

1=>111
2=>222
3=>333

2, légèrement modifié :

foreach($arr as $key=>$value)
{
//echo $key."=>".$value."\n";
$key = &$arr[$key];
}
print_r($arr);

Le résultat est le suit :

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)

Explication du code :

Nous avons constaté que le tableau d'origine a été modifié. Pourquoi ? Étudions-le.

La partie clé du code est : $key = &$arr[$key];

$key est la référence de $arr[$key], c'est-à-dire que lorsque $key est modifié, $arr[$key] est également modifié à la valeur correspondante.

Tout d'abord, nous devons comprendre le principe de foreach, qui attribue respectivement les valeurs du tableau à $key et $value ;

Donc, $key et $value sont aussi ordinaire Variable.

Ensuite, lors de la première boucle, $key = &$arr[$key]; signifie que &$arr[1] pointe vers la variable $key.

Lorsque la boucle foreach atteint la deuxième passe, $key se voit d'abord attribuer une valeur de 2. À ce moment-là, faites à nouveau attention, $key = &$arr[$key];

Le résultat est : $arr[1] se voit attribuer la nouvelle $key à ce moment, qui est 2.

Après la deuxième boucle, le tableau d'origine devient :

Array
(
    [1] => 2
    [2] => 222
    [3] => 333
)

Idem Comme Logiquement, après la fin du troisième cycle, ce sera :

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)

À ce stade, cela a été grossièrement expliqué.

3. Afin de comprendre plus clairement le processus d'affectation dans foreach, nous pouvons faire ceci :

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
$key  = &$arr[$key];
$key = "hello";
unset($key);
print_r($arr);
}

Le résultat est le suivant :

Array
(
    [1] => hello
    [2] => 222
    [3] => 333
)
Array
(
    [1] => hello
    [2] => hello
    [3] => 333
)
Array
(
    [1] => hello
    [2] => hello
    [3] => hello
)

Explication du code :

Nous attribuons directement la valeur de $key à "hello" dans chaque boucle, afin de ne pas l'affecter, puis libérons la variable $key.

Cela devrait rendre les choses plus claires.

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