题
如何使用SPL
,可能使用RecursiveDirectoryIterator
和RecursiveIteratorIterator
检索完整的目录树?
解决方案
默认情况下,RecursiveIteratorIterator
将使用LEAVES_ONLY
用于第二参数 __construct
。这意味着它只会返回文件。如果您要包括文件的和的目录(至少这是我会考虑的完全的目录树),你必须做的:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
,然后就可以foreach
在它。如果你想返回目录树,而不是将其输出,可以将其存储在一个阵列,e.g。
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;
}
}
其他提示
您可以只,或做一些你想要的一切
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
不隶属于 StackOverflow