我正在尝试使用来自var treeData
的Tree 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"
}
]
}
有办法管理吗?
使用您在问题中提到的相同代码。并改为所需的结构。
注意在两个结果上使用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;
}