遞歸的一些應用(二)無限極分類

来源:http://www.cnblogs.com/qingfj/archive/2016/08/05/5743074.html
-Advertisement-
Play Games

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 錯誤情況概述: 啟動應用之後,微信調用 相機拍照 等介面是可以正常使用的, 但是過了一段時間(2個小時左右--token/jsapi_ticket的過期時間),微信調用相機拍照的功能失效,啟用debug模式: //步驟三:通過config介面註入許可權驗證配置 wx.config({ debug: t ...
  • 棧是Vector的一個子類,它實現了一個標準的後進先出的棧。 堆棧只定義了預設構造函數,用來創建一個空棧。 堆棧除了包括由Vector定義的所有方法,也定義了自己的一些方法。 棧常用的五個方法: boolean empty() :測試堆棧是否為空。 object peek():查看棧頂元素,但是不移 ...
  • 枚舉(Enumeration)介面雖然它本身不屬於數據結構,但它在其他數據結構的範疇里應用很廣。 枚舉(The Enumeration)介面定義了一種從數據結構中取回連續元素的方式。 例如,枚舉定義了一個叫nextElement 的方法,該方法用來得到一個包含多元素的數據結構的下一個元素。 枚舉定義 ...
  • 一、SpringMVC 使用 ModelAndView 來處理返回值問題。 1.ModelAndView 官方描述: Holder for both Model and View in the web MVC framework.Note that these are entirely distin ...
  • 1. VirtualBox的安裝 參考常規安裝方式即可。 VirtualBox 4.3.14 for Windows hosts:http://download.virtualbox.org/virtualbox/4.3.14/VirtualBox-4.3.14-95030-Win.exe 2. U ...
  • 在windows2008伺服器上安裝wampserver3.0.4集成環境,預設卻是無法遠程訪問,如果要遠程訪問需要修改apache的配置文件httpd.conf,修改如下: <Directory "D:/wamp64/www/"> # # Possible values for the Optio ...
  • 註釋規範 1、 類註釋 在每個類前面必須加上類註釋,註釋模板如下: 2、 屬性註釋 在每個屬性前面必須加上屬性註釋,註釋模板如下: 3、 方法註釋 在每個方法前面必須加上方法註釋,註釋模板如下: 4、 構造方法註釋 在每個構造方法前面必須加上註釋,註釋模板如下: 5、 方法內部註釋 在方法內部使用單 ...
  • 函數指針、回調函數、系統調用區別1.函數指針 2.回調函數 體現: 1.函數名作為參數傳遞給調用函數。 2.將調用者和被調函數分開,回調函數實現具體的功能,調用者無需關註實現的具體細節。3.系統調用系統調用 --> (0x80)軟中斷(系統調用表) --> 內核函數 --> 返回到系統調用層 rea ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...