如何使用SPL
检索完整目录树,可能使用RecursiveDirectoryIterator
和RecursiveIteratorIterator
?
答案 0 :(得分:19)
默认情况下,RecursiveIteratorIterator
会将LEAVES_ONLY
用于__construct
的第二个参数。这意味着它只会返回文件。如果要包含文件和目录(至少我认为是完整的目录树),您必须这样做:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
然后你可以foreach
覆盖它。如果要返回目录树而不是输出目录树,可以将其存储在数组中,例如
foreach ($iterator as $fileObject) {
$files[] = $fileObject;
// or if you only want the filenames
$files[] = $fileObject->getPathname();
}
您也可以通过以下操作创建$fileObjects
数组,而不是foreach
:
$files[] = iterator_to_array($iterator);
如果您只希望返回目录foreach
而不是$iterator
,请执行以下操作:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
答案 1 :(得分:3)
你可以,或者做你想做的一切
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}