》例子一:
$a = array(1=>'one', 2=>'two'); foreach ($a as $key => &$val) {} // do nothing var_dump($a); foreach ($a as $key => $val) {} // do nothing var_dump($a);
返回结果:
array(2) { [1]=> string(3) "one" [2]=> &string(3) "two" } array(2) { [1]=> string(3) "one" [2]=> &string(3) "one" }
解释:
在foreach中使用了引用,&$val,这个值并没有在第一个foreach退出后自动清空,而是保留在内容中,当进入第二个foreach时,仍然可以访问到$val。所以,在第二个foreach的第一次循环时,实际上已经修改了$a[1]的值。第二次循环时,值保持不变。
原文博客地址:http://www.cnblogs.com/bourneli/archive/2012/10/29/2745130.html
》例子二:
<?php $arr2 = [ 'aaa'=>[ 'oplist'=>'aaa' ], 'bbb'=>[ 'oplist'=>'bbb' ] ]; foreach($arr2 as &$val){ if($val['oplist'] == 'aaa'){ unset($val); //不生效 //unset($val['oplist']); //生效 } } echo "<pre>"; print_r($arr2); echo "</pre>";
解释:
不能直接unset引用的变量,但是可以对里面的键做操作