用PHP构建文件树数组并在VueJS中渲染[关闭]

问题描述 投票:-2回答:1

我正在尝试使用来自var treeDataTree View - Vue.js的数据蓝图(在javascript选项卡中可见)使用PHP构建文件树数组。

var treeData = [
  {
    name: 'My Tree',
    children: [
        { name: 'hello' },
        { name: 'wat' },
        {
            name: 'child folder',
            children: [
                {
                    name: 'child folder',
                    children: [
                        { name: 'hello' },
                        { name: 'wat' }
                    ]
                },
                { name: 'hello' },
                { name: 'wat' },
                {
                    name: 'child folder',
                    children: [
                        { name: 'hello' },
                        { name: 'wat' }
                    ]
                }
            ]
        }
    ]
  },
  {name: 'My tree 2'}
]

我能够使用以下答案构建一个树数组:PHP - create dynamic multidimensional file tree array

但是Vue.js文档中看到的格式更适合这种情况。我没有找到一种方法来构建数组而不将目录定义为键。

$fileTree = dir_tree('/xy');
return $fileTree;

function dir_tree($dir) {    
  $files = array_map('basename', glob("$dir/*"));
  foreach($files as $file) {
    if(is_dir("$dir/$file")) {
        $return[$file] = dir_tree("$dir/$file");
    } else {
        $return[] = [
            'name' => $file,
            'type' => explode('.', $file)[1]
        ];
    }
  }
  return $return;
}

目前结果如下:

{
  "folder1": {
    "0": {
        "name": "test1.txt",
        "type": "txt"
    },
    "child folder1": [
        {
            "name": "sample.png",
            "type": "png"
        }
    ]
  },
  "folder2": [
    {
        "name": "test2.txt",
        "type": "txt"
    }
  ]
}

有办法管理吗?

javascript php vue.js multidimensional-array
1个回答
2
投票

使用您在问题中提到的相同代码。并改为所需的结构。

注意在两个结果上使用json_encode将给出相同的输出。

function dir_tree_array($dir) {
    $files = array_map('basename', glob("$dir/*"));
    $return = [];
    foreach($files as $file) {
        if(is_dir("$dir/$file")) {
            $return[] = [ "name"  =>  $file, "children" => dir_tree("$dir/$file")];
        } else {
            $return[] = ["name" => $file];
        }
    }
    return $return;
}

function dir_tree_object($dir) {
        $files = array_map('basename', glob("$dir/*"));
        $return = [];
        foreach($files as $file) {
            if(is_dir("$dir/$file")) {
                $obj = new stdClass();
                $obj->name = $file;
                $obj->children = dir_tree("$dir/$file");
                $return[] = $obj;
            } else {
                $obj = new stdClass();
                $obj->name = $file;
                $return[] = $obj;
            }
        }
        return $return;
    }
© www.soinside.com 2019 - 2024. All rights reserved.