foreach的坑

@liubb  December 1, 2017

以前遇到过的坑 后来想不起来。记录下。不过好像php7已经不能值引用了。


尽量使用foreach循环数组,因为它比for的效率高,但是这有时候会有点小隐患,看看PHP手册上的几句警告就明白了:
PHP foreach引用隐患
上面的说明已经很明白了,再来看一个例子:

<?php
//by http:www.phpddt.com
 
$arr = array("one", "two", "three");
 
foreach ($arr as &$value) {
    echo "Value: $value<br />\n";
}
 
echo $value;   //three
 
 
foreach ($arr as $value) {
    echo "Value: $value<br />\n";
}

打印结果是这样的:

Value: one
Value: two
Value: three
 
three
 
Value: one
Value: two
Value: two

为什么第二次打印的数组不是我们期望呢?很明显,引用操作的是数组本身,第一次循环结束后$value依然指向数组$a的最后一个元素,其实第二次循环只是对$arr[2]的三次赋值。
正确的做法是在第一次循环后把指针$value销毁(unset)掉。


添加新评论