php的foreach使用&引用数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留
php的foreach使用&引用数组最后一个元素的$value引用在foreach循环之后仍会保留该如何理解,不太明白。<?php$arr=array(1,2,3,4,5...
php的foreach使用&引用数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留该如何理解,不太明白。
<?php
$arr = array(1, 2, 3, 4, 5, 6);
foreach ($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
echo "<br>";
// $arr is now array(2, 4, 6, 8,10,12)
//unset($value); // 最后取消掉引用
foreach ($arr as $value) {
echo $value."<br>";
}
?>
输出:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 [5] => 12 )
2
4
6
8
10
10
我不太明白$arr已经改变了,为啥我再次打印的时候最后一个跟倒数第二个都是10呢?为啥最后一个不是12,这个引用是怎么理解的。 展开
<?php
$arr = array(1, 2, 3, 4, 5, 6);
foreach ($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
echo "<br>";
// $arr is now array(2, 4, 6, 8,10,12)
//unset($value); // 最后取消掉引用
foreach ($arr as $value) {
echo $value."<br>";
}
?>
输出:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 [5] => 12 )
2
4
6
8
10
10
我不太明白$arr已经改变了,为啥我再次打印的时候最后一个跟倒数第二个都是10呢?为啥最后一个不是12,这个引用是怎么理解的。 展开
展开全部
你好!
这段代码中有2个foreach循环。产生这个结果的原因是引用变量没有进行释放造成的。
1. 第一个foreach循环,使用了&$value的写法,我们理解为指针变量,当循环结束后,
它指向的是数组中最后一个元素,即$arr[5],此时它的值为12.
2. 第二个foreach循环,相当于每次循环都给$value进行赋值, 由于$value的引用没有释放,
那么就是间接的为arr[5]进行赋值,它每次的循环结果如下:
2,4,6,8,10,2
2,4,6,8,10,4
2,4,6,8,10,6
2,4,6,8,10,8
2,4,6,8,10,10
很好解决,就是在第一次foreach循环结束后,释放$value的引用,即unset($value);
希望对你有帮助!
追问
好的,我明白了,谢谢,你的意思是第二个foreach每次循环结束后,$arr数组的值就变成了你给我罗列的值。
追答
是的,所以在使用指针变量后,要及时进行释放。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询