PHP 在无限级分类情况下,通过接口取出所有分类之后生成分类树
应用场景:
通过web接口获取到无限分类部门的数据,部门数据解析出来的格式为一个二维数组。由于是自己临时写了一个简易的小框架,未加入缓存机制,因此只能一下把部门全部展示到页面上,可递归实现,但复杂度太高。
解决方法:
前提还是使用递归方法进行操作,只不过对通过接口获取的数据生成一个新的三维数组,然后进行递归操作,复杂度比较低。(若有大神有更加简单的方法,请解答,拜谢。)
实现方法:
1、处理通过接口获取到的数据。
/* * 将拉取到的部门数据处理成三维数组 * @param $dept array json解析出来的数组 * @return array * */function dept_enarray($dept = array()){ $dept_array = array(); foreach($dept as $key => $val){ if($val['parentno']){ $dept_array[$val['parentno']][0][] = $val; }else{ $dept_array[0][] = $val; } } return $dept_array;}
/* * 构建组织部门树 * @param $orgdept array dept_enarray函数处理过的数组 * @param $html string html标签内容 * @param $lv int 当前的操作等级 * @param $parentarr array 拥有子部门的部门编码 * @param $orgarr array 原始传入的数组 * return string html * */function get_depttree($orgdept,$html = '',$lv=1, $parentarr = '', $orgarr = ''){ $vl = $lv; if(!$orgarr) $orgarr = $orgdept; if(!$parentarr && $lv == 1) $parentarr = array_keys($orgdept); foreach($orgdept[0] as $key=>$val){ if(!in_array($val['deptno'],$parentarr)) $disvisiable = ' class="disvisiable" '; else $disvisiable = ''; if($lv == 1 ){ $html .= '
PS:若有大神有更好的解决方法,求留言,拜谢。