PHP實現選單無限極分類

2021-07-29 10:42:47 字數 2373 閱讀 6945

一般的專案選單根據不同的使用者,不同的角色登入,顯示不同,如果僅僅用if else來判斷就顯得很笨拙,如果要修改選單就很麻煩。最好的方法就是把選單儲存在資料庫,然後從資料庫中取出,遍歷出來,顯示到頁面上。本文章的目的就是查詢出來的資料,如何把選單的韓上下級一 一對應:

這裡我們的選單資料是臨時資料, 沒有從資料庫中查詢處理,資料基本和資料庫中的的相似. 資料如下:

$items = array(

1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),

2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),

3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),

4 => array('id' => 4, 'pid' => 3, 'name' => '長豐縣'),

6 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),

5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),

);

這裡的資料,也是更改為從資料庫查詢出來的真實資料.

function

generatetree

($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0)

foreach ($packdata

as$key => $val) else

}return

$tree;

}

分析**上面的**:這裡比較重要的地方,就是**中注釋的地方,重點1, 重點2.

1.首先遍歷陣列

2.重點1的意思是,判斷是不是根選單,如果是那麼就把根選單陣列,把陣列的引用賦給新陣列

4.重點2的意思是, 子類陣列賦值給父類陣列中鍵為$child的陣列

5.最後得到的便是乙個樹狀結構的陣列,

array ( 

[0] => array ( [id] => 1 [pid] => 0 [name] => 安徽省 [son] => array ( [0] => array ( [id] => 3 [pid] => 1 [name] => 合肥市 [son] => array ( [0] => array ( [id] => 4 [pid] => 3 [name] => 長豐縣 [son] => array ( [0] => array ( [id] => 6 [pid] => 4 [name] => 小溪村 ) ) ) ) )

[1] => array ( [id] => 5 [pid] => 1 [name] => 安慶市 ) ) )

[1] => array ( [id] => 2 [pid] => 0 [name] => 浙江省 ) )

將結果返回給前端, 加上html元素,選單的效果就出來了

1.用php做無限極,難點就是&, 這裡不是賦值,而是把引用賦給乙個陣列,這樣就達到了操作同一塊內容

2.引用賦值一般運用比較多的地方就是陣列, 物件, 比如php $arr=&$arr1, $customertwo=&$customer,這裡並不會在記憶體中開闢新的空間,而是把記憶體中這塊資料的引用傳遞給新的變數

3.用這種方法比用遞迴好很多,便於操作,遞迴有很多的不好.

4.上面的這種方式不是最好的,可以在網上找其他的方法. 有的方法用著用著就出現了問題,比如下面這個函式:

function

generatetree

($items)else

}return

$tree;

}//測試資料

$items = array(

1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),

2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),

3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),

4 => array('id' => 4, 'pid' => 3, 'name' => '長豐縣'),

7 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),

5 => array('id' => 5, 'pid' => 1, 'name' => '安慶市'),

);

這個方法確實是可以實現效果, 而且只有乙個迴圈,似乎高效不少, 但是他有最大的乙個毛病, 那就是id值必須和它對應的鍵值一直,不明白的小夥伴可以自行測試一下.

php實現無限極分類

利用兩個for迴圈實現無限級分類 表 欄位名字段型別 備註預設值 idint 主鍵 auto increment name varchar 分類名稱 pidint 父類id0 頂級分類的 pid 預設就是0了。當我們想取出某個分類的子分類樹的時候,基本思路就是遞迴,當然,出於效率問題不建議每次遞迴都...

PHP實現無限極分類

created by epp4.user t470 date 15 08 08 time 上午12 00 準備陣列,代替從資料庫中檢索出的資料 共有三個必須欄位id,name,pid header content type text html charset utf 8 categories arr...

php實現無限極分類

最近在負責報表自動化管理的小功能,想從工作內容中整理點東西形成部落格。但是過程中發現,這功能並沒有 實現上的難點。基本上值得說的地方,也就定時任務的合理設計,而定時任務之前有相關的博文。再有就是,開發思路和資料庫合理的設計。這部分也不好形成文章。但是好久沒有寫部落格,希望能堅持下來。想起之前寫過幾個...