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

伊谢尔伦
Libérer: 2023-03-11 09:10:01
original
1140 Les gens l'ont consulté

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";
}
Copier après la connexion

Le résultat est le suivant :

1=>111
2=>222
3=>333
Copier après la connexion

2, légèrement modifié :

foreach($arr as $key=>$value)
{
//echo $key."=>".$value."\n";
$key = &$arr[$key];
}
print_r($arr);
Copier après la connexion

Le résultat est le suit :

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)
Copier après la connexion
Copier après la connexion

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
)
Copier après la connexion

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

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)
Copier après la connexion
Copier après la connexion

À 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);
}
Copier après la connexion

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
)
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal