91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP+MySQL中的無限分類方法有哪些

發布時間:2021-08-09 20:23:39 來源:億速云 閱讀:145 作者:chen 欄目:編程語言

這篇文章主要介紹“PHP+MySQL中的無限分類方法有哪些”,在日常操作中,相信很多人在PHP+MySQL中的無限分類方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP+MySQL中的無限分類方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

  第一種方法

  這種方法是很常見、很傳統的一種,先看表結構

  表:category

  idint主鍵,自增

  namevarchar分類名稱

  pidint父類id,默認0

  頂級分類的pid默認就是0了。當我們想取出某個分類的子分類樹的時候,基本思路就是遞歸,當然,出于效率問題不建議每次遞歸都查詢數據庫,通常的做法是先講所有分類取出來,保存到PHP數組里,再進行處理,最后還可以將結果緩存起來以提高下次請求的效率。

  先來構建一個原始數組,這個直接從數據庫中拉出來就行:

  $categories=array(

  array('id'=>1,'name'=>'電腦','pid'=>0),

  array('id'=>2,'name'=>'手機','pid'=>0),

  array('id'=>3,'name'=>'筆記本','pid'=>1),

  array('id'=>4,'name'=>'臺式機','pid'=>1),

  array('id'=>5,'name'=>'智能機','pid'=>2),

  array('id'=>6,'name'=>'功能機','pid'=>2),

  array('id'=>7,'name'=>'超級本','pid'=>3),

  array('id'=>8,'name'=>'游戲本','pid'=>3),

  );

  目標是將它轉化為下面這種結構

  電腦

  —筆記本

  ——-超級本

  ——-游戲本

  —臺式機

  手機

  —智能機

  —功能機

  用數組來表示的話,可以增加一個children鍵來存儲它的子分類:

  array(

  //1對應id,方便直接讀取

  1=>array(

  'id'=>1,

  'name'=>'電腦',

  'pid'=>0,

  children=>array(

  &array(

  'id'=>3,

  'name'=>'筆記本',

  'pid'=>1,

  'children'=>array(

  //此處省略

  )

  ),

  &array(

  'id'=>4,

  'name'=>'臺式機',

  'pid'=>1,

  'children'=>array(

  //此處省略

  )

  ),

  )

  ),

  //其他分類省略

  )

  處理過程:

  $tree=array();

  //第一步,將分類id作為數組key,并創建children單元

  foreach($categoriesas$category){

  $tree[$category['id']]=$category;

  $tree[$category['id']]['children']=array();

  }

  //第二部,利用引用,將每個分類添加到父類children數組中,這樣一次遍歷即可形成樹形結構。

  foreach($treeas$k=>$item){

  if($item['pid']!=0){

  $tree[$item['pid']]['children'][]=&$tree[$k];

  }

  }

  print_r($tree);

  打印結果如下:

  Array

  (

  [1]=>Array

  (

  [id]=>1

  [name]=>電腦

  [pid]=>0

  [children]=>Array

  (

  [0]=>Array

  (

  [id]=>3

  [name]=>筆記本

  [pid]=>1

  [children]=>Array

  (

  [0]=>Array

  (

  [id]=>7

  [name]=>超級本

  [pid]=>3

  [children]=>Array

  (

  )

  )

  [1]=>Array

  (

  [id]=>8

  [name]=>游戲本

  [pid]=>3

  [children]=>Array

  (

  )

  )

  )

  )

  [1]=>Array

  (

  [id]=>4

  [name]=>臺式機

  [pid]=>1

  [children]=>Array

  (

  )

  )

  )

  )

  [2]=>Array

  (

  [id]=>2

  [name]=>手機

  [pid]=>0

  [children]=>Array

  (

  [0]=>Array

  (

  [id]=>5

  [name]=>智能機

  [pid]=>2

  [children]=>Array

  (

  )

  )

  [1]=>Array

  (

  [id]=>6

  [name]=>功能機

  [pid]=>2

  [children]=>Array

  (

  )

  )

  )

  )

  [3]=>Array

  (

  [id]=>3

  [name]=>筆記本

  [pid]=>1

  [children]=>Array

  (

  [0]=>Array

  (

  [id]=>7

  [name]=>超級本

  [pid]=>3

  [children]=>Array

  (

  )

  )

  [1]=>Array

  (

  [id]=>8

  [name]=>游戲本

  [pid]=>3

  [children]=>Array

  (

  )

  )

  )

  )

  [4]=>Array

  (

  [id]=>4

  [name]=>臺式機

  [pid]=>1

  [children]=>Array

  (

  )

  )

  [5]=>Array

  (

  [id]=>5

  [name]=>智能機

  [pid]=>2

  [children]=>Array

  (

  )

  )

  [6]=>Array

  (

  [id]=>6

  [name]=>功能機

  [pid]=>2

  [children]=>Array

  (

  )

  )

  [7]=>Array

  (

  [id]=>7

  [name]=>超級本

  [pid]=>3

  [children]=>Array

  (

  )

  )

  [8]=>Array

  (

  [id]=>8

  [name]=>游戲本

  [pid]=>3

  [children]=>Array

  (

  )

  )

  )

  優點:關系清楚,修改上下級關系簡單。

  缺點:使用PHP處理,假如分類數量龐大,效率也會降低。

  PHP+MySQL無限分類有哪些方法

  第二種方法

  這種方法是在表字段中增加一個path字段:

  表:category

  idint主鍵,自增

  namevarchar分類名稱

  pidint父類id,默認0

  pathvarchar路徑

  示例數據:

  idnamepidpath

  1電腦00

  2手機00

  3筆記本10-1

  4超級本30-1-3

  5游戲本30-1-3

  path字段記錄了從根分類到上一級父類的路徑,用id+’-'表示。

  這種方式,假設大家要查詢電腦下的所有后代分類,只需要一條sql語句:

  selectid,name,pathfromcategorywherepathlike(selectconcat(path,’-',id,’%')aspathfromcategorywhereid=1);

  結果:

  +—-+———–+——-+

  |id|name|path|

  +—-+———–+——-+

  |3|筆記本|0-1|

  |4|超級本|0-1-3|

  |5|游戲本|0-1-3|

  +—-+———–+——-+

  這種方式也被很多人所采納,我總結了下:

  優點:查詢容易,效率高,path字段可以加索引。

  缺點:更新節點關系麻煩,需要更新所有后輩的path字段。

到此,關于“PHP+MySQL中的無限分類方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇坪县| 江源县| 安图县| 景宁| 木兰县| 西贡区| 云林县| 永平县| 贵阳市| 个旧市| 安龙县| 蚌埠市| 河北区| 济阳县| 石景山区| 应城市| 安达市| 沙田区| 盖州市| 宜章县| 聂荣县| 通道| 原平市| 焦作市| 凤冈县| 巍山| 财经| 新沂市| 文化| 石嘴山市| 都安| 武胜县| 安岳县| 江安县| 上杭县| 永丰县| 翼城县| 边坝县| 鄱阳县| 安多县| 常山县|