php foreach中使用了传值引用&赋值可能造成的问题


foreach语句在使用的时候,如果需要改变元素的值,可以将其赋予另一个数组,也可以使用传值引用:

foreach($arr as $key=>&$value){

  ..

{

上面的语句相当于循环的传值引用:

        $value=&$arr[$key]

foreach循环结束后,最后一个$value将会被保留,即$value会保持与$arr最后一个元素建立的传值引用关系.

如果接下来重启一个foreach循环,且还是用$value来赋值的话,$value被赋值的同时,由于存在传值引用,之前的数组的最后一个元素也会被改变

下面是一个在PHP手册上的例子

<?php
$arr1 = array("a" => 1, "b" => 2, "c" => 3);
$arr2 = array("x" => 4, "y" => 5, "z" => 6);

foreach ($arr1 as $key => &$val) {}
foreach ($arr2 as $key => $val) {}

var_dump($arr1);
var_dump($arr2);
?>

The output is:
array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> &int(6) }
array(3) { ["x"]=> int(4) ["y"]=> int(5) ["z"]=> int(6) }

上面的例子中,由于$value=&$arr1['c']关系的存在,在将$arr2的每个元素赋值给$value的过程中,$arr1['c']的值都会改变,最终值为6


        解决上述问题的方法就是在完成循环之后删除$value变量:unset($value)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值