這個迭代器的名稱和描述具有誤導性 - 它實際上充當並行迭代器:您使用鍵、整數或 NULL 附加一個或多個迭代器,當您迭代 MultipleIterator 時,您會從所有附加的迭代器中獲取所有結果作為陣列(在您附加它的鍵或整數下),key() 呼叫也是如此。
根據 $flags 的設定,如果任何或所有迭代器有效,valid() 將會有效 - 使用 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 "鍵值\n"; var_dump($key);
echo "值\n"; var_dump($value);
echo "---下一個---\n";
}
?>
PHP 5.5.0 及更高版本的結果
鍵值
array(2) {
[1]=>
int(0)
["second"]=>
int(0)
}
值
array(2) {
[1]=>
int(1)
["second"]=>
int(4)
}
---下一個---
鍵值
array(2) {
[1]=>
int(1)
["second"]=>
int(1)
}
值
array(2) {
[1]=>
int(2)
["second"]=>
int(5)
}
---下一個---
鍵值
array(2) {
[1]=>
int(2)
["second"]=>
int(2)
}
值
array(2) {
[1]=>
int(3)
["second"]=>
int(6)
}
---下一個---
請注意,PHP 5.4 和 5.3 不支援在 foreach 迴圈中存取 key() 的值,因為它們預期這些值不是陣列 - 這樣做會導致「警告:MultipleIterator::key() 傳回非法類型」,並且所有迭代的鍵值都會是 (int)0 的結果。
如果沒有 MultipleIterator::MIT_KEYS_ASSOC 旗標,MultipleIterator 會根據附加的順序建立數字索引。