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 にはもっと多くのものがあるので、そのディレクトリ全体を単純に調べることはできません。) コードをコピーすることはできましたが、それは不十分です。だから今、2 つの 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 に答える