<?php
$arr = array('1','2');
foreach($arr as &$value){
}
foreach($arr as $value){
var_dump($value);
}
输出
string(1) "1"
string(1) "1"
谁给解释一下?
<?php
$arr = array('1','2');
foreach($arr as &$value){
}
foreach($arr as $value){
var_dump($value);
}
输出
string(1) "1"
string(1) "1"
谁给解释一下?
学习了,根据上面的答案简单点来说。
第一个foreach结束后,$value = &$arr[1],注意,这里是引用,可以理解为指针
重点在第二个foreach:
第一次是&$arr[1] = $arr[0],这个是赋值操作,这个时候$arr[1]的值已经已经被修改为$arr[0]了,也就是1.此时$arr = ['0'=>1,'1'=>1].
第二次&$arr[1] = $arr[1],同上.最终$arr = ['0'=>1,'1'=>1].
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读✓ 已解决
792 阅读
640 阅读
这样解释吧,把
foreach
展开成赋值的话大致是
这时候如果打印$arr,你会看到
也就是说
$value
仍然是$arr[1]
的引用(别名)然后我们再把第二个foreach拆开
解决方案是永远不要用&
或者老老实实按照官网的指示,用unset解除引用