码迷,mamicode.com
首页 > 编程语言 > 详细

PHP数组foreach引用问题

时间:2015-10-12 14:28:33      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

<?php
$arr = array(‘1‘,‘2‘);
foreach($arr as &$value){

}
foreach($arr as $value){
    var_dump($value);
}

 输出 

string(1) "1"
string(1) "1"

这样解释吧,把foreach展开成赋值的话

foreach($arr as &$value) {
    //noop
}

大致是

#begin first foreach
$value = &$arr[0];
//noop
$value = &$arr[1];
//noop
#end foreach

这时候如果打印$arr,你会看到

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  &string(1) "2"
}

也就是说$value仍然是$arr[1]的引用(别名)

然后我们再把第二个foreach拆开

#begin second foreach

$value = $arr[0];//note: 由于$value <=> &$arr[1], 此时$arr[1]被赋值成为$arr[0],也就是1

var_dump($value);//1

$value = $arr[1];//相当于$arr[1] = $arr[1]; 没有实际效果

var_dump($value);//1

#end foreach

解决方案是永远不要用&

或者老老实实按照官网的指示,用unset解除引用

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
?>
 

PHP数组foreach引用问题

标签:

原文地址:http://www.cnblogs.com/zixueit/p/4871246.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!