Maison > développement back-end > tutoriel php > php foreach array_merge问题和困惑

php foreach array_merge问题和困惑

WBOY
Libérer: 2016-07-06 13:53:19
original
1244 Les gens l'ont consulté

代码:

<code>$a = array('a' => array('a'));
$b = array('b' => array('b'));

foreach ($b as $key => &$item) {
    $item[] = 'd';
}
$a = array_merge($b, $a);
$b['b'][] = 'c';
print_r($a);
print_r($b);</code>
Copier après la connexion
Copier après la connexion

结果:

<code>Array
(
    [b] => Array
        (
            [0] => b
            [1] => d
            [2] => c
        )
    [a] => Array
        (
            [0] => a
        )
)
Array
(
    [b] => Array
        (
            [0] => b
            [1] => d
            [2] => c
        )
)</code>
Copier après la connexion
Copier après la connexion

我的困惑是为什么合并后,对$b的操作,影响到了$a。
知道的大神,请解惑一下,谢谢!

回复内容:

代码:

<code>$a = array('a' => array('a'));
$b = array('b' => array('b'));

foreach ($b as $key => &$item) {
    $item[] = 'd';
}
$a = array_merge($b, $a);
$b['b'][] = 'c';
print_r($a);
print_r($b);</code>
Copier après la connexion
Copier après la connexion

结果:

<code>Array
(
    [b] => Array
        (
            [0] => b
            [1] => d
            [2] => c
        )
    [a] => Array
        (
            [0] => a
        )
)
Array
(
    [b] => Array
        (
            [0] => b
            [1] => d
            [2] => c
        )
)</code>
Copier après la connexion
Copier après la connexion

我的困惑是为什么合并后,对$b的操作,影响到了$a。
知道的大神,请解惑一下,谢谢!

其实我感觉你把print_r改成var_dump就可以看出来了

<code>array (size=2)
  'b' => &
    array (size=3)
      0 => string 'b' (length=1)
      1 => string 'd' (length=1)
      2 => string 'c' (length=1)
  'a' => 
    array (size=1)
      0 => string 'a' (length=1)
array (size=1)
  'b' => &
    array (size=3)
      0 => string 'b' (length=1)
      1 => string 'd' (length=1)
      2 => string 'c' (length=1)</code>
Copier après la connexion

变量b指向的一个引用类型,所以改了b的值,a中的b的值也随着变

谢谢 @风吹响的号角 的回复,我又google一下 “php foreach 引用”,找到了这篇文章,更好的理解了这个问题

【PHP】 foreach循环中变量引用的一道面试题

我说下我的理解,当使用&符号时,变量$b 和 $item 会同时指向一个地址,此时$b变成了一个引用变量,如果在foreach后,unset掉$item,此时就会解除$b的引用。

É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