【问题标题】:Any way to use key in Iterator (php)?有什么方法可以在迭代器(php)中使用密钥?
【发布时间】:2015-05-08 19:02:37
【问题描述】:

我创建了一个实现 Iterator 接口的 php 类。我可以像这样成功地遍历类:

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

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

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

第一个样式在我的类中为每个元素调用 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() 在循环中。

【问题讨论】:

    标签: php interface iterator


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 2010-09-30
      • 2020-11-16
      • 1970-01-01
      • 2011-04-25
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多