以这种方式将这些SPL迭代器组合在一起:
$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。有人能给我解释一下吗?
发布于 2017-11-14 21:36:10
您的迭代器组合正在按预期工作。如果你用foreach迭代它
foreach ($iterator as $number) {
echo $number;
}您将得到预期的输出12312。
问题实际上是当您用iterator_to_array将它转换回数组时。
您需要将第二参数 ($use_keys)设置为false (默认为true),否则它将覆盖重复的键。
echo implode(', ', iterator_to_array($iterator, false));https://stackoverflow.com/questions/47295411
复制相似问题