zoukankan      html  css  js  c++  java
  • 用递归的方法实现无限极分类

    通常我在写项目的时候,在写一些例如商城分类的时候会实现对应分类的上级分类,或者其它项目部门管理的上级部门的时候一般就会用到无限极分类来进行分类

    第一步:首先在数据表设计的时候,如果要实现无限极分类,一般我会在数据表多添加一个字段pid,下面我通过一张新建的数据表来说明一下,

    (1)建表:

    -- ----------------------------

    -- Table structure for pid

    -- ----------------------------

    DROP TABLE IF EXISTS `pid`;

    CREATE TABLE pid (

      id tinyint unsigned NOT NULL AUTO_INCREMENT primary key comment '主键id',

      name varchar(32) NOT NULL,

      nickname varchar(32) DEFAULT NULL,

      pid tinyint(10) unsigned DEFAULT NULL,

      sort mediumint(10) unsigned DEFAULT 50

    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

    (2)插入数据:

    -- ----------------------------

    -- Records of pid

    -- ----------------------------

    INSERT INTO `pid` VALUES ('1', '科技', '', '0', '50');

    INSERT INTO `pid` VALUES ('2', '军事', '', '0', '50');

    INSERT INTO `pid` VALUES ('3', '人与自然', '', '0', '50');

    INSERT INTO `pid` VALUES ('4', '美食', '', '0', '50');

    INSERT INTO `pid` VALUES ('5', '人工智能', '', '1', '50');

    INSERT INTO `pid` VALUES ('6', '机器人', '', '5', '50');

    INSERT INTO `pid` VALUES ('7', '无人飞机', '', '5', '50');

    INSERT INTO `pid` VALUES ('8', '无人汽车', '', '5', '50');

    INSERT INTO `pid` VALUES ('9', '军事机器人', '哈哈', '6', '50');

    INSERT INTO `pid` VALUES ('10', '服务机器人', '', '6', '50');

    INSERT INTO `pid` VALUES ('11', '航母', '', '2', '50');

    INSERT INTO `pid` VALUES ('12', '舰载机', '', '2', '50');

    INSERT INTO `pid` VALUES ('13', '预警机', '', '2', '50');

    INSERT INTO `pid` VALUES ('14', '导弹', '', '2', '50');

    INSERT INTO `pid` VALUES ('15', '舌尖上的中国', '', '3', '50');

    INSERT INTO `pid` VALUES ('16', '川菜', '', '15', '50');

    INSERT INTO `pid` VALUES ('17', '粤菜', '', '15', '50');

    INSERT INTO `pid` VALUES ('18', '湘菜', '', '15', '50');

    INSERT INTO `pid` VALUES ('19', '生物', '', '4', '50');

    INSERT INTO `pid` VALUES ('20', '动物', '', '19', '50');

    INSERT INTO `pid` VALUES ('21', '植物', '', '19', '50');

    INSERT INTO `pid` VALUES ('26', '哈哈', '哈哈', '0', '50');

    INSERT INTO `pid` VALUES ('27', '嘿嘿嘿', '嘿嘿嘿', '26', '50');

    INSERT INTO `pid` VALUES ('28', '嘘嘘嘘', '嘘嘘嘘', '26', '50');

    数据表:

     

    数据表大概就是这样。

    第二步:进入正题,无限极分类

    复制代码
    <?php
    //设置字符集
    header('content-type:text/html;charset=utf-8');
    
    /**
     * 无限极分类
     * @param   $list array()
     * return array
     */
    //无限极分类,实现具有父子关系的数据分类
    function category($arr,$pid=0,$level=0){
        //定义一个静态变量,存储一个空数组,用静态变量,是因为静态变量不会被销毁,会保存之前保留的值,普通变量在函数结束时,会死亡,生长周期函数开始到函数结束,再次调用重新开始生长
        //保存一个空数组
        static $list=array();
        //通过遍历查找是否属于顶级父类,pid=0为顶级父类,
        foreach($arr as $value){
            //进行判断如果pid=0,那么为顶级父类,放入定义的空数组里
            if($value['pid']==$pid){
                //添加空格进行分层
                $arr['level']=$level;
                $list[]=$value;
                //递归点,调用自身,把顶级父类的主键id作为父类进行再调用循环,空格+1
                category($arr,$value['id'],$level+1);
            }
        }
        return $list;//递归出口
    }
    复制代码

    连接数据:

     

    效果:

     

    2.一个小扩展:

    这只是我自己理解的无限极分类,对于自己知识点的一些总结。有不妥的地方大家希望大家给些建议,共同学习,共同进步。thanks~

  • 相关阅读:
    无法嵌入互操作类型“ADOX.CatalogClass”。请改用适用的接口。
    编码:隐匿在计算机软硬件背后的语言(3)--二进制加法器
    编码:隐匿在计算机软硬件背后的语言(2)--二进制
    C#中Mutex的用法
    C#中创建二维数组,使用[][]和[,]的区别
    git同时存在两个账号(在同一台电脑上)——三步完成(已修正)
    C++之标准库vector
    C++之标准库map
    sublime和vscode 格式化Json ——两步走
    二十八、linux下权限管理chmod
  • 原文地址:https://www.cnblogs.com/pcyy/p/5769507.html
Copyright © 2011-2022 走看看