【发布时间】:2011-01-25 23:02:35
【问题描述】:
如何使用SPL(可能使用RecursiveDirectoryIterator 和RecursiveIteratorIterator)检索完整的目录树?
【问题讨论】:
如何使用SPL(可能使用RecursiveDirectoryIterator 和RecursiveIteratorIterator)检索完整的目录树?
【问题讨论】:
默认情况下,RecursiveIteratorIterator 将使用LEAVES_ONLY 作为__construct 的第二个参数。这意味着它将仅返回文件。如果你想包含文件 和 目录(至少我认为这是一个 full 目录树),你必须这样做:
$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;
}
}
【讨论】:
你可以做任何你想做的事
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
【讨论】:
$file 的类型是 SplFileInfo ?