看看这个:
<?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个包装括号。
所以这很巧合!!!
为什么它会这样?我的意思是,这很好但是...... ????
答案 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()
以及“另请参阅”部分中的其他功能。