有什么方法可以在 Iterator (php) 中使用 key?
Any way to use key in Iterator (php)?
我创建了一个实现 Iterator 接口的 php class。我可以像这样成功地迭代 class:
foreach($data as $key=>$value)
echo $key;
然而,这总是给我一个奇怪的结果:
foreach($data as $item)
echo key($item)
第一种样式在我的 class 中为每个元素调用 key() 方法。后者从不调用它。
我错过了什么吗?那应该行得通,不是吗?
更新:我想我遗漏了什么。 key 函数不能像我期望的那样对一个简单的数组起作用:
$test = [['name'=>'foo'],['name'=>'bar'],['name'=>'fizz']];
foreach($test as $key=>$item)
echo $key;
foreach ($test as $item)
echo key($item);
给了我 012namenamename... 不是我所期待的。我想我只需要使用 $key=>value 表示法,并且永远不要指望循环中的 key()。
您的第一个版本是正确的,这就是它起作用的原因。有关为什么您的第二种方法不起作用的简短说明,请参阅手册中的 this comment。
这是因为(来自 foreach()
的手册)
On each iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one
所以你的第二种方法是获取下一个密钥,而不是当前密钥。
我创建了一个实现 Iterator 接口的 php class。我可以像这样成功地迭代 class:
foreach($data as $key=>$value)
echo $key;
然而,这总是给我一个奇怪的结果:
foreach($data as $item)
echo key($item)
第一种样式在我的 class 中为每个元素调用 key() 方法。后者从不调用它。
我错过了什么吗?那应该行得通,不是吗?
更新:我想我遗漏了什么。 key 函数不能像我期望的那样对一个简单的数组起作用:
$test = [['name'=>'foo'],['name'=>'bar'],['name'=>'fizz']];
foreach($test as $key=>$item)
echo $key;
foreach ($test as $item)
echo key($item);
给了我 012namenamename... 不是我所期待的。我想我只需要使用 $key=>value 表示法,并且永远不要指望循环中的 key()。
您的第一个版本是正确的,这就是它起作用的原因。有关为什么您的第二种方法不起作用的简短说明,请参阅手册中的 this comment。
这是因为(来自 foreach()
的手册)
On each iteration, the value of the current element is assigned to $value and the internal array pointer is advanced by one
所以你的第二种方法是获取下一个密钥,而不是当前密钥。