为什么 PHP 不断重置数组指针?

Why PHP keeps resetting the array pointer?

提问人:John 提问时间:4/10/2012 最后编辑:Scott C WilsonJohn 更新时间:4/10/2012 访问量:258

问:

所以我花了 2 个小时试图解决这个问题,尽可能最小化代码以隔离问题,但我无法弄清楚这一点。

所以我有这个代码:

$arr['key']['name'] = array("one", "two", "three");

$counter = 0;
do
{
    $cur = current($arr);

    $k = key($arr['key']['name']);
    next($arr['key']['name']);
}while($k !== null);

这是一个永无止境的循环。出于某种原因,在遍历所有 $arr['key']['name'] 值后,key() 不再返回 NULL,而是再次返回 0。删除 $cur = current($arr);但是解决了这个问题。根据 php 手册,完全不影响数组指针。现在我知道复制数组会重置其指针,但没有复制,如果有$k将始终为零,而不是从 0 到 2,然后重置回 0。current()

PHP 数组

评论

0赞 nickb 4/10/2012
如果你正在做,你需要.$cur = current($arr['key']['name']);next($arr['key']['name']);
0赞 John 4/10/2012
因为这样我就会得到 $arr['key']['name'] 的当前元素,而不是 $arr 的当前元素,它是 $arr['key'] :)
0赞 Jānis Elmeris 10/14/2013
这似乎是一些未记录/错误的东西。我将“$cur = current($arr);”重写为“current($arr);”,循环结束。或者我将“$arr['key']['name']”替换为“$arr['name']”,循环结束。

答:

2赞 Dr.Kameleon 4/10/2012 #1

你为什么不这样做呢?

法典:

foreach ($arr['key']['name'] as $k)
{
    // do something with $k

}

评论

0赞 John 4/10/2012
因为我不需要一次访问所有元素,所以我只是做了一个小例子来演示这个问题,在我的真实代码中,它不是一个循环:)
4赞 Ignacio Vazquez-Abrams 4/10/2012 #2

current() 不会移动使用它的数组的数组指针,但您在不同的数组上使用它。它正在重置嵌套数组的指针。

评论

1赞 John 4/10/2012
怎么会这样?这没有意义,在当前()的手册中没有提到它。
1赞 Ignacio Vazquez-Abrams 4/10/2012
可能是因为没有人预料到它会以这种方式使用。
0赞 John 4/10/2012
是的,但是如果它确实重置了嵌套数组的指针,为什么它在 current() 运行时不在每次迭代时都这样做,而是在整个遍历整个 $arr['key']['name'] 数组之后才这样做?