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 $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 及以上版本的结果


数组(2) {
[1]=>
整数(0)
["second"]=>
整数(0)
}

数组(2) {
[1]=>
整数(1)
["second"]=>
整数(4)
}
---下一个---

数组(2) {
[1]=>
整数(1)
["second"]=>
整数(1)
}

数组(2) {
[1]=>
整数(2)
["second"]=>
整数(5)
}
---下一个---

数组(2) {
[1]=>
整数(2)
["second"]=>
整数(2)
}

数组(2) {
[1]=>
整数(3)
["second"]=>
整数(6)
}
---下一个---

请注意,PHP 5.4 和 5.3 不支持在 foreach 循环中访问 key() 值,因为它们期望 key() 值不是数组 - 这样做会导致“警告:MultipleIterator::key() 返回的类型非法”,并且所有迭代的键都为 (int)0。

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