用遞歸的方法實現無限極分類 通常我在寫項目的時候,在寫一些例如商城分類的時候會實現對應分類的上級分類,或者其它項目部門管理的上級部門的時候一般就會用到無限極分類來進行分類 第一步:首先在數據表設計的時候,如果要實現無限極分類,一般我會在數據表多添加一個欄位pid,下麵我通過一張新建的數據表來說明一下 ...
用遞歸的方法實現無限極分類
通常我在寫項目的時候,在寫一些例如商城分類的時候會實現對應分類的上級分類,或者其它項目部門管理的上級部門的時候一般就會用到無限極分類來進行分類
第一步:首先在數據表設計的時候,如果要實現無限極分類,一般我會在數據表多添加一個欄位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~