有什么方法可以在 Iterator (php) 中使用 key?

Any way to use key in Iterator (php)?

我创建了一个实现 Iterator 接口的 php class。我可以像这样成功地迭代 class:

foreach($data as $key=>$value)
    echo $key;

然而,这总是给我一个奇怪的结果:

foreach($data as $item)
    echo key($item)

第一种样式在我的 class 中为每个元素调用 key() 方法。后者从不调用它。

我错过了什么吗?那应该行得通,不是吗?

更新:我想我遗漏了什么。 key 函数不能像我期望的那样对一个简单的数组起作用:

$test = [['name'=>'foo'],['name'=>'bar'],['name'=>'fizz']];

foreach($test as $key=>$item)
    echo $key;

foreach ($test as $item)
    echo key($item);

给了我 012namenamename... 不是我所期待的。我想我只需要使用 $key=>value 表示法,并且永远不要指望循环中的 key()。

您的第一个版本是正确的,这就是它起作用的原因。有关为什么您的第二种方法不起作用的简短说明,请参阅手册中的 this comment

这是因为(来自 foreach() 的手册)

On each iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one

所以你的第二种方法是获取下一个密钥,而不是当前密钥。