开发者

Use RecursiveDirectoryIterator to list directories and files into array?

开发者 https://www.devze.com 2023-01-13 08:59 出处:网络
I\'m having a directory with this structure : main开发者_如何学运维/ - images/ |-- file1.jpg |-- file2.jpg

I'm having a directory with this structure :

  • main开发者_如何学运维/
    • |- images/
      • |-- file1.jpg
      • |-- file2.jpg
      • |-- file3.jpg
    • |- documents/
      • |-- private/
        • |--- blahblahblah.docx
      • |-- test.doc
      • |-- test.xls
      • |-- test.txt

I can create a function to complete the work but the RecursiveDirectoryIterator class is much faster and less memory usage this time. How can I use RecursiveDirectoryIterator to list these directory into an array like this :

 array(  
    "main/" => array(  
        "images/" => array(  
            "file1.jpg",   
            "file2.jpg",   
            "file3.jpg"  
        ),   
        "documents/" => array(  
            "private/" => array(  
                "blahblahblah.docx"  
            ),  
            "test.doc",   
            "test.xls",   
            "test.txt"  
        )  
    )  
)  


Well, to recursively iterate over the RecursiveIterator, you need a RecursiveIteratorIterator (I know it seems redundant, but it's not)...

However, for your particular case (Where you're looking to generate a structure rather than just visit all of the nodes), I think regular recursion would be better suited...

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;
}

Edit it to work with non-recursive-iterators...


Just to record for others, I've turned into a gist a class (RecursiveDirectoryIterator) that can read a directory with all its children and output a JSON or just an array.

https://gist.github.com/jonataswalker/3c0c6b26eabb2e36bc90

And a tree viewer of the output

http://codebeautify.org/jsonviewer/067c13

0

精彩评论

暂无评论...
验证码 换一张
取 消