MultipleIterator 类

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

简介

一个迭代器,它依次遍历所有附加的迭代器

类概要

class MultipleIterator implements Iterator {
/* 常量 */
public const int MIT_NEED_ANY;
public const int MIT_NEED_ALL;
public const int MIT_KEYS_NUMERIC;
public const int MIT_KEYS_ASSOC;
/* 方法 */
public __construct(int $flags = MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_NUMERIC)
public attachIterator(Iterator $iterator, string|int|null $info = null): void
public containsIterator(Iterator $iterator): bool
public current(): array
public detachIterator(Iterator $iterator): void
public getFlags(): int
public key(): array
public next(): void
public rewind(): void
public setFlags(int $flags): void
public valid(): bool
}

预定义常量

MultipleIterator::MIT_NEED_ANY

在迭代中不要求所有子迭代器都有效。

MultipleIterator::MIT_NEED_ALL

要求在迭代中所有子迭代器都有效。

MultipleIterator::MIT_KEYS_NUMERIC

键是从子迭代器的位置创建的。

MultipleIterator::MIT_KEYS_ASSOC

键是从子迭代器的关联信息创建的。

目录

添加注释

用户贡献的注释 1 个注释

37
sven at rtbg dot de
9 年前
这个迭代器有一个误导性的名称和描述 - 它实际上充当并行迭代器:您可以使用键、整数或 NULL 附加一个或多个迭代器,当您迭代 MultipleIterator 时,作为 current() 的结果,您将获得所有附加迭代器的所有结果作为数组(在您用它附加的键或整数下),对 key() 调用也是如此。

如果任何或所有迭代器有效,则 valid() 将有效,具体取决于 $flags 的设置 - 使用 ANY,您可以迭代一组迭代器,其中一些迭代器在其他迭代器结束之前结束,并从这些迭代器获取 NULL 结果,直到最后一个迭代器结束。使用 ALL,当第一个迭代器停止传递结果时,迭代停止。

在任何情况下,都会对所有附加的迭代器调用 next() 和 rewind()。

<?php

$it1
= new ArrayIterator(array(1,2,3));
$it2 = new ArrayIterator(array(4,5,6));

$multipleIterator = new MultipleIterator(MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_ASSOC);

$multipleIterator->attachIterator($it1, 1);
$multipleIterator->attachIterator($it2, 'second');

foreach (
$multipleIterator as $key => $value) {
echo
"Key\n"; var_dump($key);
echo
"Value\n"; var_dump($value);
echo
"---next---\n";
}
?>

PHP 5.5.0 及更高版本的结果

Key
array(2) {
[1]=>
int(0)
["second"]=>
int(0)
}
Value
array(2) {
[1]=>
int(1)
["second"]=>
int(4)
}
---next---
Key
array(2) {
[1]=>
int(1)
["second"]=>
int(1)
}
Value
array(2) {
[1]=>
int(2)
["second"]=>
int(5)
}
---next---
Key
array(2) {
[1]=>
int(2)
["second"]=>
int(2)
}
Value
array(2) {
[1]=>
int(3)
["second"]=>
int(6)
}
---next---

请注意,PHP 5.4 和 5.3 不支持在 foreach 循环中访问 key() 值,因为它们预期它们不是数组 - 这样做会导致 "Warning: Illegal type returned from MultipleIterator::key()" 警告,并且所有迭代的键都将返回 (int)0 的结果。

如果没有 MultipleIterator::MIT_KEYS_ASSOC 标志,MultipleIterator 将根据附加顺序创建数字索引。
To Top