How to get a list of files of subfolders and write them in a JSON using php?

前端 未结 1 1014
你的背包
你的背包 2021-01-07 01:51

I\'m already able to list all the file names and current directory/folder but I don\'t know how to create JSON entries for subdirectories

Here is my code

         


        
1条回答
  •  广开言路
    2021-01-07 02:25

    One way to achieve the recursive listing of a directory is using a recursive function.

    /*
     * Converts a filesystem tree to a PHP array.
     */
    function dir_to_array($dir)
    {
            if (! is_dir($dir)) {
                    // If the user supplies a wrong path we inform him.
                    return null;
            }
    
            // Our PHP representation of the filesystem
            // for the supplied directory and its descendant.
            $data = [];
    
            foreach (new DirectoryIterator($dir) as $f) {
                    if ($f->isDot()) {
                            // Dot files like '.' and '..' must be skipped.
                            continue;
                    }
    
                    $path = $f->getPathname();
                    $name = $f->getFilename();
    
                    if ($f->isFile()) {
                            $data[] = [ 'file' => $name ];
                    } else {
                            // Process the content of the directory.
                            $files = dir_to_array($path);
    
                            $data[] = [ 'dir'  => $files,
                                        'name' => $name ];
                            // A directory has a 'name' attribute
                            // to be able to retrieve its name.
                            // In case it is not needed, just delete it.
                    }
            }
    
            // Sorts files and directories if they are not on your system.
            \usort($data, function($a, $b) {
                    $aa = isset($a['file']) ? $a['file'] : $a['name'];
                    $bb = isset($b['file']) ? $b['file'] : $b['name'];
    
                    return \strcmp($aa, $bb);
            });
    
            return $data;
    }
    
    /*
     * Converts a filesystem tree to a JSON representation.
     */
    function dir_to_json($dir)
    {
            $data = dir_to_array($dir);
            $data = json_encode($data);
    
            return $data;
    }
    

    In your example,

    echo dir_to_json('office/');
    

    would output this

    { 
        "dir": [
            {
                "file": "FreeWallpapersApp.zip"
            },
            {
                "file": "20151211_ClipArtForTextView.7z"
            },
            // ...
            {
                "dir": [
                    {
                        "file": "App.zip"
                    },
                    {
                        "file": "View.7z"
                    },
                    "name": "A Directory With Files",
                ]
            },
        ]
    }
    

    Update 1:

    I updated the answer to explicitly sort the files and directories.

    0 讨论(0)
提交回复
热议问题