在foreach-loop奇怪行为中的php key()或在foreach循环中获取下一个键

时间:2012-12-02 19:28:49

标签: php arrays behavior next

看看这个:

<?php
    $array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…');
    foreach ($array as $key => $val){
        echo "current key: $key, next key: ".key(($array))."<br>";
    }
?>

输出:

current key: a, next key: b
current key: b, next key: c
current key: c, next key: d
current key: d, next key: e
current key: e, next key: f
current key: f, next key: a

我正在寻找一个函数来获取foreach循环中关联数组的下一个键。我尝试了一下,突然间它起了作用。 (正如你在我的例子中看到的那样)。

但为什么这样做?是否有意义? ......不是我! 你能解释一下吗?

这是因为key(($array))部分,但为什么?我的意思是..这是一个错误..我想写key($array)但我忘了删除2个包装括号。 所以这很巧合!!!

为什么它会这样?我的意思是,这很好但是...... ????

1 个答案:

答案 0 :(得分:4)

根据key的PHP手册, key()返回当前数组位置的索引元素。

问题不在于key,甚至是双括号。 Key通过引用接收数组,因此双括号没有做太多。

行为来自foreach。当foreach遍历数组时,不同版本的PHP在设置数组的内部current指针时会表现不同,这就是key()next()current()等等,正在考虑何时被召唤。

PHP中的数组与大多数语言中的数组不同;它们实际上是对象(尤其是关联数组)。想想它们有点像链接列表(它们链接列表,但只是为了说明目的而与我一起) - 当你迭代时,你需要知道你目前所处的位置以及你要去的地方成为下一个。

这里显然发生的是,无论您运行的是什么版本的PHP,foreach都会在开头设置指向current元素的内部next指针$key和$value变量之后,立即执行for循环的em>。

我肯定依赖于此行为,因为对PHP的后续更新可能会破坏此代码。这个特定版本只是一个有趣的巧合。如果您需要 next 键,请查看替换foreach循环。 next()上的PHP手册有很好的示例,请务必查看prev()each()以及“另请参阅”部分中的其他功能。