如何构建包含文件夹结构的数组?

Gih*_*ita 2 php json

我想在ExtJS树面板中构建一个Json输出列表文件夹结构.该结构应该相当于Json中的这个数组:

Array
(
    [text] => .
    [children] => Array
        (
            [0] => Array
                (
                    [text] => files
                    [children] => 
                )

            [1] => Array
                (
                    [text] => folder 1
                    [children] => 
                )

            [2] => Array
                (
                    [text] => New directory
                    [children] => array(
                        [0] => Array
                            (
                                [text] => sub_1
                                [children] => array(
                                    [0] => Array
                                        (
                                            [text] => sub_1_1
                                            [children] => 
                                        )
                                    [1] => Array
                                        (
                                            [text] => sub_1_2
                                            [children] => 
                                        )                                    
                                )
                            )
                        [1] => Array
                            (
                                [text] => sub_2
                                [children] => 
                            )                             
                    )
                )    
        )    
)
Run Code Online (Sandbox Code Playgroud)

我做了这个函数,通过PHP手册和示例来显示结构

listFolders('../file_uploads/');
function listFolders($dir){
    $dh = scandir($dir);
    echo '<ul>';
    foreach($dh as $folder){
        if($folder != '.' && $folder != '..')
        {
            if(is_dir($dir.'/'.$folder)){
                echo '<li>'.$folder.'</li>';
                listFolders($dir.'/'.$folder);
            }
        }
    }
    echo '</ul>';
}
Run Code Online (Sandbox Code Playgroud)

这输出结构

  • 新目录
    • sub_1
      • sub_1_1
        • sub_1_1_1
        • sub_1_2
        • sub_2
          • 文件夹1

            我想知道如何将此输出转换为上面的数组(或Json)?

            print "<pre>";
            print_r(listFolders('../file_uploads/'));
            
            function listFolders($dir)
            {
                $dh = scandir($dir);
                $return = array();
            
                foreach ($dh as $folder) {
                    if ($folder != '.' && $folder != '..') {
                        if (is_dir($dir . '/' . $folder)) {
                            $return[] = array(
                                'text' => $folder,
                                'children' => listFolders($dir . '/' . $folder)
                            );
                        }
                    }
                }
                return $return;
            }
            
            Run Code Online (Sandbox Code Playgroud)

            在此输入图像描述

            Vla*_*eda 6

            请尝试以下代码:

            function listFolders($dir)
            {
                $dh = scandir($dir);
                $return = array();
            
                foreach ($dh as $folder) {
                    if ($folder != '.' && $folder != '..') {
                        if (is_dir($dir . '/' . $folder)) {
                            $return[] = array($folder => listFolders($dir . '/' . $folder));
                        } else {
                            $return[] = $folder;
                        }
                    }
                }
                return $return;
            }
            
            Run Code Online (Sandbox Code Playgroud)

            似乎为我工作,虽然没有正确测试.