php - 遍历多个 RecursiveDirectoryIterator

标签 php iterator

我目前有以下 PHP:

$directoryIterator = new RecursiveDirectoryIterator( __DIR__ . '/tests/phpunit/' );

/**
 * @var SplFileInfo $fileInfo
 */
foreach ( new RecursiveIteratorIterator( $directoryIterator ) as $fileInfo ) {
    if ( substr( $fileInfo->getFilename(), -8 ) === 'Test.php' ) {
        $files[] = $fileInfo->getPathname();
    }
}

这会创建一个数组,其中包含/tests/phpunit 中以 Test.php 结尾的文件的路径。效果很好。但是现在我也想在/tests/integration 中注册东西。 (/tests 中还有更多内容,所以我不能简单地遍历整个目录。)我可以复制代码,但那很蹩脚。所以现在我想弄清楚如何循环两个 RecursiveDirectoryIterator 实例。这可能以一种理智的方式实现吗?

最佳答案

要遍历迭代器,您可以使用 AppendIterator class.

$directoryIterator = new RecursiveDirectoryIterator( __DIR__ . '/tests/phpunit/' );
$directoryIterator1 = new RecursiveDirectoryIterator( __DIR__ . '/tests/integration/' );
$iterator = new AppendIterator();
$iterator->append(new RecursiveIteratorIterator( $directoryIterator ));
$iterator->append(new RecursiveIteratorIterator( $directoryIterator1 ));

/**
 * @var SplFileInfo $fileInfo
 */
foreach ($iterator as $fileInfo) {
    if ( substr( $fileInfo->getFilename(), -8 ) === 'Test.php' ) {
        $files[] = $fileInfo->getPathname();
    }
}

关于php - 遍历多个 RecursiveDirectoryIterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17079881/

相关文章:

C++ 迭代器被认为是有害的?

java - 为什么SortedSet中没有 "descendingIterator ()",但TreeSet中却有?

php - 使用 PHP 解析实时 SOAP 数据流

javascript - JQuery 提前触发

php - JSON cURL - foreach() 的参数无效 - PHP

php - Laravel Eloquent 中的 If 语句

c++ - cbegin函数的返回值

c++ - 查找具有前缀字符串的容器的相等范围

C++ - 无法通过引用传递迭代器指向的对象

php - 使添加到购物车按钮适用于简单的网上商店