我有这个PHP代码:
$a=array(1, 2, 3);
var_dump(current($a));
each($a);
each($a);
each($a);
var_dump(current($a));
$b=$a;
var_dump(current($a));
输出是“int(1)bool(false)int(1)”但我期望“int(1)bool(false)bool(false)”,因为经过三次each
内部指针$a
应该在数组结束后留在那里。
但显然,赋值$b=$a
再次将$a
的指针设置回第一个元素。这是怎么回事?
(如果删除一个each
,则输出为“int(1)int(3)int(3)”,如预期的那样。)
答案 0 :(得分:2)
来自http://php.net/manual/en/function.each.php:
警告:因为将数组分配给另一个变量会重置原始数据 数组的指针,我们上面的例子会导致无限循环 将$ fruit分配给循环内的另一个变量。
答案 1 :(得分:1)
这是设计的。这PHP manual page个州:
警告因为将数组分配给另一个变量会重置原始数组的指针,如果我们将$ fruit分配给循环内的另一个变量,上面的示例会导致无限循环。
答案 2 :(得分:1)
在PHP 7中,此行为已得到纠正。
$a=array(1, 2, 3);
var_dump(current($a)); // 1
each($a);
each($a);
each($a);
var_dump(current($a)); // false
$b=$a;
var_dump(current($a)); // php7-> false; php5.6 -> 1
php wiki页上描述的更改。