Heim  >  Artikel  >  Backend-Entwicklung  >  PHP 在无限级归类情况下,通过接口取出所有分类之后生成分类树

PHP 在无限级归类情况下,通过接口取出所有分类之后生成分类树

WBOY
WBOYOriginal
2016-06-13 12:17:51875Durchsuche

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;}

2、对处理得到的三维数组进行递归操作,然后生成html。

/* * 构建组织部门树 * @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 .= '
PHP 在无限级归类情况下,通过接口取出所有分类之后生成分类树 '.$val['name'].'
  • 添加子部门
  • 添加成员
  • 编辑部门
  • 删除部门
'; }else{ $html .= '
PHP 在无限级归类情况下,通过接口取出所有分类之后生成分类树 '.$val['name'].'
  • 添加子部门
  • 添加成员
  • 编辑部门
  • 删除部门
'; } if(in_array($val['deptno'], $parentarr)){ $html = get_depttree($orgarr[$val['deptno']],$html,++$vl,$parentarr,$orgarr); } if($lv == 1) $html .= '
'; } return $html;}
最后实现的html效果如下。



PS:若有大神有更好的解决方法,求留言,拜谢。





Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn