我创建了一个实现迭代器接口的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并且内部数组指针前进一
因此,您的第二种方法是获取下一个密钥,而不是当前密钥。