php foreach 引用注意

 》例子一:

$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引用的变量,但是可以对里面的键做操作

posted on 2016-12-13 11:46  长风剑客  阅读(171)  评论(0编辑  收藏  举报

导航