>我有这个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 页面上描述的更改。