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

Joh*_*ith 6 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>";
    }
?>
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

ceg*_*ult 4

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

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

该行为来自foreach。当foreach迭代数组时,不同版本的 PHP 在设置数组的内部current指针时会有不同的行为,这就是key()next()current()等在调用它们时所查看的内容。

PHP 中的数组与大多数语言中的数组不同。它们实际上是对象(尤其是关联数组)。把它们想象成链表(它们不是链表,只是为了说明目的而跟我一起)——当你迭代时,你需要知道你当前在哪里以及你下一步将在哪里。

这里显然发生的事情是,无论您运行的 PHP 版本如何,在代码中设置和变量之后,立即foreach将内部current指针设置为for 循环开头的元素next$key$value

我绝对不会依赖这种行为,因为 PHP 的后续更新可能会破坏此代码。这只是这个特定版本的一个有趣的巧合。如果您想要下一个键,请考虑更换foreach循环。关于next()的 PHP 手册有很好的示例,并且一定要查看“另请参阅”部分中的prev()each()和其他函数。