zTree树插件所需标准JSON数据格式,如何用PHP的SPL实现算法?

新手上路,请多包涵

在使用zTree过程中,插件所需要的JSON格式数据如下所示,目前需要一个算法,将目录格式化为下面数组所示的格式,目录层级未知,算法可以是一个单独的函数或者用PHP的SPL中的RecursiveDirectoryIterator+ RecursiveIteratorIterator来实现。

//zTree插件所需JSON格式数据
[
    { name:"父节点1 - 展开", open:true,
        children: [
            { name:"父节点11 - 折叠",
                children: [
                    { name:"叶子节点111"},
                    { name:"叶子节点112"},
                    { name:"叶子节点113"},
                    { name:"叶子节点114"}
                ]},
            { name:"父节点12 - 折叠",
                children: [
                    { name:"叶子节点121"},
                    { name:"叶子节点122"},
                    { name:"叶子节点123"},
                    { name:"叶子节点124"}
                ]},
            { name:"父节点13 - 没有子节点", isParent:true}
        ]
    },
    { name:"父节点2 - 折叠",
        children: [
            { name:"父节点21 - 展开", open:true,
                children: [
                    { name:"叶子节点211"},
                    { name:"叶子节点212"},
                    { name:"叶子节点213"},
                    { name:"叶子节点214"}
                ]},
            { name:"父节点22 - 折叠",
                children: [
                    { name:"叶子节点221"},
                    { name:"叶子节点222"},
                    { name:"叶子节点223"},
                    { name:"叶子节点224"}
                ]},
            { name:"父节点23 - 折叠",
                children: [
                    { name:"叶子节点231"},
                    { name:"叶子节点232"},
                    { name:"叶子节点233"},
                    { name:"叶子节点234"}
                ]}
        ]
    },
    { name:"父节点3 - 没有子节点", isParent:true}
];
// 算法应得的结果数组
$dir = array(
    array(
        'name' => '一级目录1',
        'children' => array(
            array(
                'name' => '二级目录',
                'children' => array(
                    array('name'=>'文件1'),
                    array('name'=>'文件2'),
                    array('name'=>'文件3'),
                    array('name'=>'文件4'),
                )
            )
        )
    ),
    array(
        'name' => '一级目录2',
        'children' => array(
            array('name'=>'文件1'),
            array('name'=>'文件2'),
            array('name'=>'文件3'),
            array('name'=>'文件4'),
        )
    ),
    array(
        'name' => '一级目录3',
    ),
);
阅读 4.8k
1 个回答
public static function layer($cate,$name = 'children',$pid = 0){
         $arr = array();
         foreach ($cate as $key=>$v) {
             if($v['pId']==$pid){
                 $v[$name] =  self::layer($cate,$name,$v['id']);
                 //清空空的子节点
                 if(empty($v['children'])){
                  unset($v['children']);
                 }
                 $arr[] = $v;

             }
         }
         return $arr;
     }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题