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

时间:2016-02-06 23:36:41

标签: php arrays

我有这个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)”,如预期的那样。)

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页上描述的更改。