php - 使用 RecursiveDirectoryIterator 将目录和文件列表到数组中?

标签 php class object standards

我有一个具有这种结构的目录:

  • 主要/
    • |- 图片/
      • |-- file1.jpg
      • |-- file2.jpg
      • |-- file3.jpg
    • |- 文件/
      • |-- 私有(private)/
        • |--- blahblahblah.docx
      • |-- 测试.doc
      • |-- 测试.xls
      • |-- 测试.txt

我可以创建一个函数来完成工作,但 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/

相关文章:

java - 通用编程 - 类的使用

javascript - 在 JavaScript 中声明一个没有名字的函数

php - 如何在 WordPress 中将 DIV 包裹在子菜单周围 - 仅在第一级?

php - namespace 错误。卡在 'MyApp\Chat'

php - WEB SOCKET PHP 概念

php - var_dump 一个 php 类对象显示数据库用户名和密码

java - 接口(interface)作为引用变量

JavaScript 按 ID 和名称将 3 个对象数组合并为 1 个对象数组

vba - VBA for Excel 中的刽子手

php - 查找重复项的最佳性能算法是什么?