• PHP实现无极限分类


    PHP实现无极限分类

    1、添加子目录

    <?php
    /**
         * @description
         * @param array  $arr 二维数组
         * @param string $pk 主键id
         * @param string $upid 表示父级id的字段
         * @param string $child 子目录的键
         * @return array
         */
        function getTree($arr=array(),$pk='id',$upid='pid',$child='child'){
            $items = array();
            foreach($arr as $val){
                $items[$val[$pk]] = $val;
            }
            $tree = array();
            foreach($items as $k=>$val){
                if(isset($items[$val[$upid]])){
                    $items[$val[$upid]][$child][]=&$items[$k];
                }else{
                    $tree[] = &$items[$k];
                }
            }
            return $tree;
        }

      
    $arr = array(
    array('id' => 1, 'name' => '系统设置', 'pid' => 0),
    array('id' => 2, 'name' => '菜单设置', 'pid' => 0),
    array('id' => 3, 'name' => '添加菜单', 'pid' => 2),
    array('id' => 4, 'name' => '编辑菜单', 'pid' => 2),
    array('id' => 7, 'name' => '修改菜单', 'pid' => 4),
    array('id' => 5, 'name' => '网站设置', 'pid' => 1),
    array('id' => 6, 'name' => '支付设置', 'pid' => 0)
    );
     
     
    getTree($arr);

    ?>

     效果如下:

    2、树形结构

    <?php
    /**
         * @description
         * @param array  $arr 传入的二维数组
         * @param string $pk 主键id
         * @param string $name 分类名称
         * @param string $upid 表示父级id的字段
         * @param int    $root 根级别(最高父级一般为0)
         * @param int    $index 层级
         * @return array
         */
        function getTree($arr = array(),$pk='id',$name='name',$upid='pid',$root=0,$index=0){
            $tree = array();
            foreach ($arr as $k=>$value) {
                if($value[$upid]==$root){
                    $value[$name] = str_repeat('|--', $index).$value[$name];
                    $tree[] = $value;
                    $tree = array_merge($tree,getTree($arr,$value[$pk],$index+1));
                }
            }
            return $tree;
        }
    
    ?>
    

      

    3.生成HTML分类代码

    /**
     * @description
     * @param $data 为调用上面方法2(添加子目录)得到的结果
     */
    function makeHtml($data,&$str='')
    {
        $str .= '<ul>';
        foreach ($data as $key => $val) {
            $cateId = $val['id'];
            if (isset($val['child']) && !empty($val['child'])) {
                $str .= "<li class='hasChild top'><a data-id='{$cateId}'>" . $val['name'] . "</a>";
                makeHtml($val['child'],$str);
                $str .= '</li>';
            } else {
                $className = $val['pid'] == 0 ? 'top' : '';
                $str .= "<li class='{$className}'><a data-id='{$cateId}'>" . $val['name'] . "</a></li>";
            }
        }
        $str .= '</ul>';
        return $str;
    }

    echo makeHtml($data);

     

     效果如下:

  • 相关阅读:
    走微软的路,何去何从?
    无须学生edu邮箱免费获得WP8开发者账号与解锁教程
    javascript获取页面宽度高度及屏幕分辨率
    商业思维导图Mindmap软件XMind
    工作笔记软件EverNote
    类的成员函数指针数组
    Live Connect和Live SDK的一些简介
    山寨新浪微博客户端与新浪微博API调用的总结
    Js整理备忘(01)—— 变量作用域
    Js整理备忘(02)——运算符
  • 原文地址:https://www.cnblogs.com/ccw869476711/p/13658036.html
Copyright © 2020-2023  润新知