我创建了一个实现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()。
答案 0 :(得分:0)
您的第一个版本是正确的,这就是它的原因。有关第二种方法不起作用的简短说明,请参阅手册中的this comment。
这是因为(来自foreach()
的手册)
在每次迭代中,当前元素的值被赋值为$ value,内部数组指针被提前一个
所以你的第二种方法是获取下一个键,而不是当前键。