这个迭代器有一个误导性的名称和描述 - 它实际上充当并行迭代器:您可以使用键、整数或 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 将根据附加顺序创建数字索引。