在迭代器(php)中使用密钥的任何方法


Any way to use key in Iterator (php)?

我创建了一个实现迭代器接口的php类。我能够像这样成功遍历类:

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

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

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

第一种样式为每个元素调用我的类中的 key() 方法。后者从不打电话。

我错过了什么吗?这应该有效,不是吗?

更新:我想我错过了一些东西。键函数也不能像我对简单数组所期望的那样工作:

$test = [['name'=>'foo'],['name'=>'bar'],['name'=>'fizz']];
foreach($test as $key=>$item)
    echo $key;
foreach ($test as $item)
    echo key($item);

给我012名字名字...不太符合我的预期。我想我只需要使用 $key=>value 表示法,永远不要指望循环中的 key()。

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

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

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

因此,您的第二种方法是获取下一个密钥,而不是当前密钥。