6

我目前有以下 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 实例。这可能以一种理智的方式吗?

4

1 回答 1

9

要迭代迭代器,您可以使用AppendIterator 类。

$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();
    }
}
于 2013-06-13T05:46:27.777 回答