PHP Conference Japan 2024

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, 字串|整數|null $info = null): void
public current(): 陣列
public detachIterator(迭代器 $iterator): void
public getFlags(): 整數
public key(): 陣列
public next(): void
public rewind(): void
public setFlags(整數 $flags): void
public valid(): 布林值
}

預定義常數

MultipleIterator::MIT_NEED_ANY

迭代時不需要所有子迭代器皆有效。

MultipleIterator::MIT_NEED_ALL

迭代時需要所有子迭代器皆有效。

MultipleIterator::MIT_KEYS_NUMERIC

鍵值由子迭代器的位置建立。

MultipleIterator::MIT_KEYS_ASSOC

鍵值由子迭代器的關聯資訊建立。

目錄

新增筆記

使用者貢獻的筆記 1 則筆記

sven at rtbg dot de
9 年前
這個迭代器的名稱和描述具有誤導性 - 它實際上充當並行迭代器:您使用鍵、整數或 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 會根據附加的順序建立數字索引。
To Top