zoukankan      html  css  js  c++  java
  • 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);

    输出如下:

  • 相关阅读:
    JAVA关于byte数组与String转换的问题
    XML快速注释
    const常量与define宏定义的区别
    IOS进度渐变图层CAGradientLayer
    UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout
    UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
    细说UIScrollView上的Touch 事件
    ios TableView那些事(二十 九)UITableViewController 粘合性
    UITableViewController子控制器的使用方法
    iOS: 如何在工程中设置 DEBUG 模式?
  • 原文地址:https://www.cnblogs.com/guliang/p/11660038.html
Copyright © 2011-2022 走看看