两个 json 如下所示:
$jsonStr = '{"houduan":{"php":["test.md"]},"qianduan":{"css":["test.md"],"html":["test.md"],"javascript":["test.md"]}}';
$jsonStr2 = '[
{"name": "houduan", "children":[
{"name": "php", "children":[
{"name": "test.md"}
]}
]},
{"name": "qianduan", "children":[
{"name": "css", "children": [
{"name": "test.md"}
]},
{"name": "html", "children": [
{"name": "test.md"}
]},
{"name": "javascript", "children": [
{"name": "test.md"}
]}
]}
]';
想写个函数,传入 $jsonStr,输出 $jsonStr2,奈何太菜了,写不出来,好像要递归遍历……
这个需求是这样来的 —— 我想用 php + ztree,写个目录树,列出指定文件夹下所有的目录与文件。我有个函数,传入目录名,会返回一个json,形如上面给出的 $jsonStr,包含这个目录下所有的目录和文件名。
现在我需要根据这个 json,得到 ztree 这个插件打印目录树需要的 json 数据,该 json 形如上面的 $jsonStr2。
附:列出指定目录下所有目录与文件的函数:
function dir2Array($dir)
{
$a = [];
if($handler = opendir($dir))
{
while (($content = readdir($handler)) !== FALSE)
{
if ($content != "." && $content != ".." && $content != "Thumb.db")
{
if(is_file($dir."/".$content)){
//$a[] = $dir . "/" . $content;
$a[] = $content;
}
elseif (is_dir($dir."/".$content)) {
$a[$content] = dir2Array($dir."/".$content);
}
}
}
closedir($handler);
}
return $a;
}
function dir2Json($dir) {
$arr = dir2Array($dir);
return json_encode($arr);
}
echo dir2Json('notes');
PHP
zTree
JSON