• php实现无限极分类


    1、树形结构
     1 <?php
     2 /**
     3      * @description
     4      * @param array  $arr 传入的二维数组
     5      * @param string $pk 主键id
     6      * @param string $name 分类名称
     7      * @param string $upid 表示父级id的字段
     8      * @param int    $root 根级别(最高父级一般为0)
     9      * @param int    $index 层级
    10      * @return array
    11      */
    12     function getTree($arr = array(),$pk='id',$name='name',$upid='pid',$root=0,$index=0){
    13         $tree = array();
    14         foreach ($arr as $k=>$value) {
    15             if($value[$upid]==$root){
    16                 $value[$name] = str_repeat('|--', $index).$value[$name];
    17                 $tree[] = $value;
    18                 $tree = array_merge($tree,getTree($arr,$value[$pk],$index+1));
    19             }
    20         }
    21         return $tree;
    22     }
    23 
    24 ?>
    效果如下:
     
    2、添加子目录
     1 <?php
     2 /**
     3      * @description
     4      * @param array  $arr 二维数组
     5      * @param string $pk 主键id
     6      * @param string $upid 表示父级id的字段
     7      * @param string $child 子目录的键
     8      * @return array
     9      */
    10     function getTree($arr=array(),$pk='id',$upid='pid',$child='child'){
    11         $items = array();
    12         foreach($arr as $val){
    13             $items[$val[$pk]] = $val;
    14         }
    15         $tree = array();
    16         foreach($items as $k=>$val){
    17             if(isset($items[$val[$upid]])){
    18                 $items[$val[$upid]][$child][]=&$items[$k];
    19             }else{
    20                 $tree[] = &$items[$k];
    21             }
    22         }
    23         return $tree;
    24     }
    25 
    26 ?>

    效果如下:

    测试数组:

    $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)
    );


     最后:生成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);

    输出如下:

  • 相关阅读:
    js中的数组
    range关键字,map,sync.Map,list
    数组,切片
    类型转换,指针,变量的生命周期,常量,模拟枚举,类型别名和类型定义
    字符串类型及其常用操作
    整数类型,浮点类型,复数,bool类型
    声明,初始化,匿名变量,作用域
    C#并发编程——异步编程基础
    继承、多态、接口
    C#基础
  • 原文地址:https://www.cnblogs.com/guliang/p/11660038.html
Copyright © 2020-2023  润新知