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

Php 变量赋值重置内部数组指针,php,arrays,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)”,因为在三次之后,每个的$a的内部指针应该在数组的末尾之后,并保持在那里 但是显然赋值$b=$a将

我有以下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)”,因为在三次
之后,每个
$a
的内部指针应该在数组的末尾之后,并保持在那里

但是显然赋值
$b=$a
$a
的指针再次设置回第一个元素。这是怎么回事

(如果我删除每个
中的一个
,则输出为预期的“int(1)int(3)int(3)”。

来自:

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

发件人:

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

这是设计的。该条规定:

注意:由于将数组分配给另一个变量会重置原始数组的指针,因此,如果将$FROUT分配给循环中的另一个变量,上面的示例将导致一个无休止的循环

这是设计的。该条规定:

注意:由于将数组分配给另一个变量会重置原始数组的指针,因此,如果将$FROUT分配给循环中的另一个变量,上面的示例将导致一个无休止的循环


这种行为在PHP7中得到纠正

$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 

第页所述的更改。

此行为在PHP7中得到纠正

$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打开一个bug报告,以便他们在文档中修复并澄清它…在PHP7中,这会按照您的预期(返回
1,false,false
)执行。。。。在
5.6
中,它似乎不…对。。。听起来这是PHP7中修复的某种副作用。谢谢你们。好的,“修复”可能取决于观点,我会说“更改了未记录的行为”,这当然会破坏升级php时的一些工作代码:)如果每个指针只有两个而不是三个,为什么分配不重置指针?这是个好问题,我想答案就在这个问题上:)我想它只有在结束时才会重置。向php打开一个bug报告,以便他们在文档中修复并澄清它…在PHP7中,这会按照您的预期(返回
1,false,false
)执行。。。。在
5.6
中,它似乎不…对。。。听起来这是PHP7中修复的某种副作用。谢谢你们。好的,“修复”可能取决于观点,我会说“更改了未记录的行为”,这当然会破坏一些升级php时的工作代码:)