Contents
  1. 1. 如何避免这个问题?

有时间我们在使用foreach时需要改变数组原有项的值,需要传入一个&,表示使用数组原有的值,而不是一个复制值。

1
2
3
4
5
6
7
8
9
10
$arr = range(1,3);
foreach($arr as $k => &$v) {

}
var_dump($arr); //1 2 3

foreach($arr as $v) {

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

如上第二个循环输出的是1 2 2 ,而不是1 2 3
第一个循环以 &$v 传入引用,循环结束后$v指向$arr[2],第二个循环使用的 $v 仍然是引用,仍然指向$arr[2],这样第二个循环的第一次是$arr[0]即 1 赋值给$arr[2],
第二次是$arr[1]即 2 赋值给$arr[2],第三次是$arr[2]即2赋值给$arr[2],所以打印 1 2 2。

如何避免这个问题?

1、在第二次循环之前,unset($value)
2、第二次foreach的时候使用不同名字的变量,如$item

Contents
  1. 1. 如何避免这个问题?