在Iterator(php)中使用密钥的任何方法?

时间:2015-03-07 04:05:45

标签: php interface iterator

我创建了一个实现Iterator接口的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);

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

1 个答案:

答案 0 :(得分:0)

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

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

  

在每次迭代中,当前元素的值被赋值为$ value,内部数组指针被提前一个

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