無極限分類詳解
阿新 • • 發佈:2018-12-14
一、.將示例 無極限分類
1.建立示例:
注:pid代表上級目錄,level代表目錄深度
<?php header("content-type='text/html;charset=utf-8"); $arr = array( array('id'=>1,'name'=>'時事新聞','pid'=>0,'level'=>0), array('id'=>2,'name'=>'體育新聞','pid'=>0,'level'=>0), array('id'=>3,'name'=>'國內新聞','pid'=>1,'level'=>1), array('id'=>4,'name'=>'足球新聞','pid'=>2,'level'=>1), array('id'=>5,'name'=>'國際新聞','pid'=>1,'level'=>1), array('id'=>6,'name'=>'歐洲足球','pid'=>4,'level'=>2), array('id'=>7,'name'=>'籃球新聞','pid'=>2,'level'=>1), array('id'=>8,'name'=>'西甲','pid'=>6,'level'=>3), array('id'=>9,'name'=>'NBA','pid'=>7,'level'=>2) );
2.輸出示例:
- 補充說明:
- 要輸出完整的樹型結構,必須使用遞迴。(因為不知道深度是多少)。
function getTree($arr,$pid=0) { foreach ($arr as $value) { if ($value['pid'] == $pid) { //在輸出節點名稱之前,根據level的值,來決定輸出多少個空格 echo str_repeat(' ',$value['level']). $value['name'] . "<br>"; //2.每輸出一個頂級節點,繼續輸出其所有子節點: getTree($arr,$value['id']); } } } getTree($arr);
3.將原始陣列(從資料庫讀出來的陣列)改造成可直接使用foreach迴圈的陣列,可直接用foreach來進行遍歷,方便在檢視當中直接使用foreach/colist直接輸出。
改造思路:原來是輸出,現在儲存到一個新陣列,當函式結束執行時,return新陣列即可。
function getTree($arr,$pid=0) { //使用static之後,記憶體中就只有一份$result變數 static $result = array(); foreach ($arr as $value) { if ($value['pid'] == $pid) { //每次輸出節點名時,將節點的整個陣列儲存到新陣列 $result[] = $value; //呼叫getTree進行遞迴 getTree($arr,$value['id']); } } return $result; } $a = getTree($arr); print_r($a);