使用RecursiveDirectoryIterator将目录和文件列入数组?

use*_*124 4 php standards class object

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

  • 主要/
    • | - images /
      • | - file1.jpg
      • | - file2.jpg
      • | - file3.jpg
    • | - 文件/
      • | - 私人/
        • | --- blahblahblah.docx
      • | - test.doc
      • | - test.xls
      • | - test.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"  
        )  
    )  
)  
Run Code Online (Sandbox Code Playgroud)

irc*_*ell 12

好吧,要递归迭代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;
}
Run Code Online (Sandbox Code Playgroud)

编辑它以使用非递归迭代器...