欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-28 17:04:51
...
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效果如下。

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


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





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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频