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

数据表:

e1a33d9adaf2c485af1d67dbc4be49e0.png

5a270b44abac36677c0a6fff9edc7364.png

数据表大概就是这样。

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

//设置字符集

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;//递归出口

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

e5d00c376e42cc54aebeb751e44f250d.png

连接数据:

25a9edd498717ac57d19eafa51014f80.png

cc81c56a5216910ffe6a4dc9d64a73a3.png

效果:

99ca2ad1d48ad1b1fdb161aff3305611.png

2.一个小扩展:

dcff1cf0db0d4036b61b1e497744e965.png

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
无限级树(Java递归) 2007-02-08 10:26 这几天,用java写了一个无限极的树,递归写的,可能代码不够简洁,性能不够好,不过也算是练习,这几天再不断改进。前面几个小图标的判断,搞死我了。 package com.nickol.servlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.nickol.utility.DB; public class category extends HttpServlet { /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>Category</TITLE>" + "<style type='text/css'>" + "body{font-size:12px;}" + "</style>" + "<script language='javascript' src='js/tree.js'></script>" + "</HEAD>"); out.println(" <BODY>"); out.println(showCategory(0,0,new ArrayList(),"0")); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public String showCategory(int i,int n,ArrayList frontIcon,String countCurrent){ int countChild = 0; n++; String webContent = new String(); ArrayList temp = new ArrayList(); try{ Connection conn = DB.GetConn(); PreparedStatement ps = DB.GetPs("select * from category
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页

打赏

weixin_39774644

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者