变量赋值重置内部数组指针


Variable assignment resets internal array pointer

>我有这个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)"。

从 http://php.net/manual/en/function.each.php:

注意:因为将数组分配给另一个变量会重置原始数组 数组的指针,我们上面的例子会导致无限循环,如果我们 将$fruit分配给循环内的另一个变量。

这是设计使然。此 PHP 手册页指出:

注意 由于将数组分配给

另一个变量会重置原始数组的指针,因此如果我们将$fruit分配给循环内的另一个变量,我们上面的示例将导致无限循环。

此行为在 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 页面上描述的更改。