码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-04-13 19:03:07      阅读:162      评论:0      收藏:0      [点我收藏+]

标签: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 .= '<dl>
            <dt class="f'.$val['parentno'].' father" data-deptid="'.$val['deptno'].'" status="close">
                <em><img src="/public/images/list-close.png"'.$disvisiable.'> </em>
                <span>'.$val['name'].'</span>
            <div class="addmenu">
                <ul>
                    <li class="addson">添加子部门</li>
                    <li class="adduser">添加成员</li>
                    <li>编辑部门</li>
                    <li class="deldept">删除部门</li>
                </ul>
            </div>
            </dt>';
        }else{
            $html .= '<dd class="list'.($vl-1).' f'.$val['parentno'].' father" data-deptid="'.$val['deptno'].'" status="close">
                <em><img src="/public/images/list-close.png"'.$disvisiable.'></em>
                <span>'.$val['name'].'</span>
                <div class="addmenu">
                    <ul>
                        <li class="addson">添加子部门</li>
                        <li class="adduser">添加成员</li>
                        <li>编辑部门</li>
                        <li class="deldept">删除部门</li>
                    </ul>
                </div>
            </dd>';
        }

        if(in_array($val['deptno'], $parentarr)){
            $html = get_depttree($orgarr[$val['deptno']],$html,++$vl,$parentarr,$orgarr);
        }
        if($lv == 1)
            $html .= '</dl>';
    }

    return $html;
}

最后实现的html效果如下。

技术分享


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





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

标签:php   无限分类   

原文地址:http://blog.csdn.net/kissxia/article/details/45028791

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!