6

看这个:

<?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 个包装括号。所以这是巧合!

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

4

1 回答 1

4

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

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

该行为来自foreach。当foreach遍历数组时,不同版本的 PHP 在设置数组的内部current指针时会表现出不同的行为,这就是key()调用它们next()current()正在查看的内容。

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

这里显然发生的是,在您运行的任何版本的 PHP 上,都在 for 循环开始时设置指向元素foreach的内部current指针,紧接着在代码中设置and变量。next$key$value

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

于 2012-12-02T19:54:04.887 回答