易于理解的示例
<?php
$iterator = new ParentIterator(
new RecursiveArrayIterator(
array(array(1, 2, 3), 'A', 'B', 'C')
)
);
foreach ($iterator as $recursive) {
foreach ($recursive as $value) {
echo $value . PHP_EOL;
}
}
?>
1
2
3
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
此扩展的 FilterIterator 允许使用 RecursiveIteratorIterator 进行递归迭代,仅显示具有子元素的元素。
易于理解的示例
<?php
$iterator = new ParentIterator(
new RecursiveArrayIterator(
array(array(1, 2, 3), 'A', 'B', 'C')
)
);
foreach ($iterator as $recursive) {
foreach ($recursive as $value) {
echo $value . PHP_EOL;
}
}
?>
1
2
3
ParentIterator 只是一个 RecursiveFilterIterator,它的 accept() 方法调用 RecursiveFilterIterator->hasChildren() 方法来进行自身过滤。
基本上,它会过滤掉叶子节点。例如
这将生成所有文件和目录
<?php
$rdi = new RecursiveDirectoryIterator(__DIR__);
$iter = new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::CHILD_FIRST);
?>
将它包装在 ParentIterator 中将过滤掉只留下目录
<?php
$rdi = new RecursiveDirectoryIterator(__DIR__);
$iter = new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::CHILD_FIRST);
$dirsOnly = new ParentIterator($iter);
?>