您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php foreach array_merge问题和困惑

2025/3/4 17:43:07发布7次查看
代码:
$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);

结果:
array( [b] => array ( [0] => b [1] => d [2] => c ) [a] => array ( [0] => a ))array( [b] => array ( [0] => b [1] => d [2] => c ))

我的困惑是为什么合并后,对$b的操作,影响到了$a。
知道的大神,请解惑一下,谢谢!
回复内容: 代码:
$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);

结果:
array( [b] => array ( [0] => b [1] => d [2] => c ) [a] => array ( [0] => a ))array( [b] => array ( [0] => b [1] => d [2] => c ))

我的困惑是为什么合并后,对$b的操作,影响到了$a。
知道的大神,请解惑一下,谢谢!
其实我感觉你把print_r改成var_dump就可以看出来了
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)
变量b指向的一个引用类型,所以改了b的值,a中的b的值也随着变
谢谢 @风吹响的号角 的回复,我又google一下 “php foreach 引用”,找到了这篇文章,更好的理解了这个问题
【php】 foreach循环中变量引用的一道面试题
我说下我的理解,当使用&符号时,变量$b 和 $item 会同时指向一个地址,此时$b变成了一个引用变量,如果在foreach后,unset掉$item,此时就会解除$b的引用。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product