+
 新版

PHP,如下所示,如何根据 $josnStr 得到 $jsonStr2?

php_ 发布于 2020/05/11 17:07
阅读 416
收藏 0

两个 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');

 

加载中
0
Frank_cic
Frank_cic
$jsonStr = '{"houduan":{"php":["test.md"]},"qianduan":{"css":["test.md"],"html":["test.md"],"javascript":["test.md"]}}';

$original = json_decode($jsonStr);

function analysis($data)
{
    foreach ($data as $k => $v) {
        if (is_string($k)) {
            $temp[] = ['name' => $k, 'children' => analysis($v)];
        } else {
            return [['name' => $v]]; // 不明白你为啥这里非要多加一层
        }
    }
    return $temp;
}

$jsonStr2 = json_encode(analysis($original));

 

 
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部