php foreach中引用传值指针问题

首先我们需要了解PHP foreach的遍历机制, 简单来讲 php foreach 遍历中会存在一个类似于 JavaScript 中变量提升的问题。

我们看下面得一个例子:

<?php

$arr = array(1, 2, 3);

foreach ($arr as $v) {};

var_dump($v); // 3

此时 $v 的值为数组 $arr 的最后一个值;

那么我们将上面的例子稍微改一下:


$arr = array(1, 2, 3);

// 此时使用,引用赋值
// 第一次,$v 指向 $arr 第一个值的地址
// 第二次,$v 指向 $arr 第二个值的地址
// 第三次,$v 指向 $arr 第三个值的地址
foreach ($arr as &$v) {};

// 此时, $v 已存在指向 $arr 第三个值的地址
// 开始遍历
// 第一次, 给 $v 赋值 $arr 第一个值 1, $v 指向 $arr 数组第三个元素的值,因此第一次遍历后,$arr 的值为 [1, 2, 1]
// 第一次, 给 $v 赋值 $arr 第一个值 2, $v 指向 $arr 数组第三个元素的值,因此第一次遍历后,$arr 的值为 [1, 2, 2]
// 第一次, 给 $v 赋值 $arr 第一个值 2, $v 指向 $arr 数组第三个元素的值,因此第一次遍历后,$arr 的值为 [1, 2, 2]
foreach ($arr as $v) {};

var_dump($arr); // 1, 2, 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值