2013-06-13 19 views
3

我现在有下面的PHP:循环在多个RecursiveDirectoryIterator

$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(); 
    } 
} 

这将创建的路径在/测试/ PHPUnit的与test.php的结尾的文件的数组。工作很好,很好。不过现在我也想在/ tests/integration中注册东西。 (在/测试中有更多的东西,所以我不能简单地通过整个目录。)我可以复制代码,但这是跛脚的。所以现在我想弄清楚如何遍历两个RecursiveDirectoryIterator实例。这是否可能以一种理智的方式?

回答

3

遍历迭代器可以使用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(); 
    } 
}