我有一个具有这种结构的目录:
- 主要/
- |- 图片/
- |-- file1.jpg
- |-- file2.jpg
- |-- file3.jpg
- |- 文件/
- |-- 私有(private)/
- |--- blahblahblah.docx
- |-- 测试.doc
- |-- 测试.xls
- |-- 测试.txt
- |-- 私有(private)/
- |- 图片/
我可以创建一个函数来完成工作,但 RecursiveDirectoryIterator 类这次要快得多,内存使用也更少。我如何使用 RecursiveDirectoryIterator 将这些目录列出到这样的数组中:
array(
"main/" => array(
"images/" => array(
"file1.jpg",
"file2.jpg",
"file3.jpg"
),
"documents/" => array(
"private/" => array(
"blahblahblah.docx"
),
"test.doc",
"test.xls",
"test.txt"
)
)
)
最佳答案
好吧,要递归迭代 RecursiveIterator
,您需要 RecursiveIteratorIterator
(我知道这似乎是多余的,但事实并非如此)...
但是,对于您的特定情况(您希望生成结构而不是仅仅访问所有节点),我认为常规递归更适合...
function DirectoryIteratorToArray(DirectoryIterator $it) {
$result = array();
foreach ($it as $key => $child) {
if ($child->isDot()) {
continue;
}
$name = $child->getBasename();
if ($child->isDir()) {
$subit = new DirectoryIterator($child->getPathname());
$result[$name] = DirectoryIteratorToArray($subit);
} else {
$result[] = $name;
}
}
return $result;
}
编辑它以使用非递归迭代器...
关于php - 使用 RecursiveDirectoryIterator 将目录和文件列表到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556781/