php foreach中引用传值指针问题

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

我们看下面得一个例子:



$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

你可能感兴趣的:(php)