首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么InfiniteIterator不重复一个ArrayIterator?

为什么InfiniteIterator不重复一个ArrayIterator?
EN

Stack Overflow用户
提问于 2017-11-14 21:21:11
回答 1查看 81关注 0票数 1

以这种方式将这些SPL迭代器组合在一起:

代码语言:javascript
复制
$iterator = new LimitIterator(
    new InfiniteIterator(
        new ArrayIterator(range(1, 3))
    ),
    0,
    5
);

echo implode(', ', iterator_to_array($iterator));

我希望得到这个输出:1, 2, 3, 1, 2

在第一次遍历ArrayIterator (1, 2, 3)之后,InfiniteIterator应该将ArrayIterator倒带并从开始开始,直到达到LimitIterator的极限(1, 2, 3, 1, 2)为止。

但实际上它的输出是1, 2, 3。有人能给我解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-14 21:36:10

您的迭代器组合正在按预期工作。如果你用foreach迭代它

代码语言:javascript
复制
foreach ($iterator as $number) {
    echo $number;
}

您将得到预期的输出12312

问题实际上是当您用iterator_to_array将它转换回数组时。

您需要将第二参数 ($use_keys)设置为false (默认为true),否则它将覆盖重复的键。

代码语言:javascript
复制
echo implode(', ', iterator_to_array($iterator, false));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47295411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档