有没有办法在迭代器(php)中使用key?

有没有办法在迭代器(php)中使用key?,php,interface,iterator,Php,Interface,Iterator,我创建了一个实现迭代器接口的php类。我成功地遍历了类,如下所示: foreach($data as $key=>$value) echo $key; 然而,这始终给了我一个奇怪的结果: foreach($data as $item) echo key($item) 第一种样式为每个元素调用类中的key方法。后者从不这样称呼它 我错过什么了吗?这应该行得通,不是吗 更新:我想我遗漏了什么。对于简单数组,key函数的工作方式与我预期的不同,或者: $test = [['n

我创建了一个实现迭代器接口的php类。我成功地遍历了类,如下所示:

foreach($data as $key=>$value)
    echo $key;
然而,这始终给了我一个奇怪的结果:

foreach($data as $item)
    echo key($item)
第一种样式为每个元素调用类中的key方法。后者从不这样称呼它

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

更新:我想我遗漏了什么。对于简单数组,key函数的工作方式与我预期的不同,或者:

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

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

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

给我一个名字。。。不完全是我所期望的。我想我只需要使用$key=>值表示法,不要指望循环中的key。

您的第一个版本是正确的,这就是它工作的原因。有关第二种方法不起作用的原因的简短解释,请参阅手册中的

这是因为从手册中

在每次迭代中,将当前元素的值分配给$value,并将内部数组指针前进一步

因此,第二种方法是获取下一个键,而不是当前键