PHP foreach中值加了&符号的坑 作用域

        $a = [ ['id' => 1], ['id' => 3], ['id' => 4]];
        foreach ($a as $k => &$v) {
            $v['id'] = $v['id'];
        }

        $b = [ ['id' => 5], ['id' => 6], ['id' => 7]];
        foreach ($b as $k => $v) {
            $v['id'] = $v['id'];
        }
        var_dump($a);
        dump($a);

结果:

原因:php作用域$v在方法内的作用域导致,不使用&符号 在foreach下面可获取最后一个$v的值,指针指向最后一个$v导致下面foreach 相同位置的$v被替换。

如果说一个方法内的所有foreach 的$v 都带上& 就会正常输出,因为每个$v都从源数据的头部指向下个地址。代码如下:

        $a = [ ['id' => 1], ['id' => 3], ['id' => 4]];
        foreach ($a as $k => &$v) {
            $v['id'] = $v['id'];
        }

        $b = [ ['id' => 5], ['id' => 6], ['id' => 7]];
        foreach ($b as $k => &$v) {
            $v['id'] = $v['id'];
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值