無限級分類
是一種很常見,很必須的功能,幾乎每個項目都有。
應用場景:下拉列表,樹型列表等
無限級分類的類型前端實現(前端框架一般已經實現好了,只要后端按照指定格式傳數據給前端就可以生成了)
后端實現(下面主要講這種實現)
無限級多種實現第一種(推薦)
function infiniteSort($data, $showFName, $titleFName, $pidFName = "pid", $idFName = "id", $levelFName = "level", $pid = 0, $level = 0) { $tree = array(); foreach ($data as $key => $value) { if ($value[$pidFName] == $pid) { $value[$levelFName] = $level; $value[$showFName] = str_repeat(" ", $level) . "|-" . $value[$titleFName]; $tree[] = $value; unset($data[$key]); $tempArr = infiniteSort($data, $showFName, $titleFName, $pidFName, $idFName, $level, $value[$idFName], $level + 1); if(!empty($tempArr)){ $tree = array_merge($tree, $tempArr); } } } return $tree; }
注意:
1、$data 已經asc排序過的所有數據
2、$showFName 顯示名字的字段名(格式化過的)
3、$titleFName 標題的字段名(無格式化)
4、$levelFName 層級字段名
5、$pidFName 父id的字段名
6、$idFName id的字段名
第二種(使用引用變量)
/** * 無限級分類 * @param Array $treeList //接受處理完成數據的數組 * @param Array $data //數據庫里獲取的結果集 * @param String $level //格式化層級字段名 * @param Int $pid * @param Int $count //第幾級分類 */ function tree(&$treeList, &$data, $level, $show_name, $field_name, $field_pid = "pid", $field_id = "id", $pid = 0, $count = 0) { foreach ($data as $key => $value) { if ($value[$field_pid] == $pid) { $value[$level] = $count; $value[$show_name] = str_repeat(" ",$count)."|-".$value[$field_name]; $treeList[] = $value; unset($data[$key]); tree($treeList, $data, $level, $show_name, $field_name,$field_pid, $field_id, $value[$field_id], $count+1); } } }
注意:
1、$data 已經asc排序過的所有數據
2、返回的無限級列表數據都存在$treeList里面
第三種(使用靜態變量有限制:如果一次請求調用兩次來實現2個無限級分類就會出現問題,所以不推薦)
public function getTree($list, $parent_id, $level=0) { //應該是靜態的局部變量,這樣才能保證,在遞歸調用時,所有 //的getTree方法,操作的是一個Tree空間。 static $tree = array();//保存找到的分類的數組 //遍歷所有分類,通過parent_id判斷,哪些是我們正在查找的 foreach($list as $row) { //判斷當前所遍歷的分類$row, 是否是當前需要查找的子分類 if($row["pid"] == $parent_id) { //找到了一個分類 //存起來,存哪? $row["level"] = $level; $tree[] = $row; //繼續查找當前$row所代表的分類的子分類 $this->getTree($list, $row["id"], $level+1); } } return $tree; }
注意:
1、$list 已經asc排序過的所有數據
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22324.html
摘要:我們在新建一個刪除前的鉤子函數,再利用遞歸方法實現子欄目的刪除。最后我們刪除把鉤子函數恢復到原始狀態在瀏覽器中輸入,然后點擊美國一欄中的刪除,此時會同時刪除美國下的紐約。至此,無限級分類的刪除功能操作完畢。 在此現更正一下之前的預告,之前忘記了先應該把無限級分類欄目列表功能做完,也就是刪除功能還沒做,所以今天我們先做刪除,下一節再做面包屑導航。非常抱歉。 同時,不知道是什么原因,上一節...
摘要:可以看到,我們首先獲取到了所有的數據,然后按照父級歸類。無限嵌套評論先來看下這個無限嵌套評論長什么樣子。文件掃描使用遞歸進行目錄文件的掃描的栗子。 回顧 上一篇文章我們講到實戰PHP數據結構基礎之遞歸。來回顧下什么是遞歸? 一般來說,遞歸被稱為函數自身的調用。 遞歸在開發中的實際運用 N級分類 無限級的分類在平常的開發中是常見的需求,并且在不少面試題中都會碰到。不管你做什么項目,應該都...
摘要:可以看到,我們首先獲取到了所有的數據,然后按照父級歸類。無限嵌套評論先來看下這個無限嵌套評論長什么樣子。文件掃描使用遞歸進行目錄文件的掃描的栗子。 回顧 上一篇文章我們講到實戰PHP數據結構基礎之遞歸。來回顧下什么是遞歸? 一般來說,遞歸被稱為函數自身的調用。 遞歸在開發中的實際運用 N級分類 無限級的分類在平常的開發中是常見的需求,并且在不少面試題中都會碰到。不管你做什么項目,應該都...
摘要:有這樣一個表,是分類的,是分類名稱,是上級分類的?,F在有個分類,程序要找到它上級的上級的上級分類的,簡單說就是找出頂級分類的。比如新鮮水果的是,對應父類是,而的父是,沒有父類,也就是頂級分類了。 有這樣一個表,id是分類的ID,name是分類名稱,pid是上級分類的ID。showImg(https://segmentfault.com/img/bVtnrg); 現在有個分類ID,程序要...
閱讀 2929·2021-10-18 13:33
閱讀 846·2019-08-30 14:20
閱讀 2628·2019-08-30 13:14
閱讀 2518·2019-08-29 18:38
閱讀 2887·2019-08-29 16:44
閱讀 1211·2019-08-29 15:23
閱讀 3482·2019-08-29 13:28
閱讀 1915·2019-08-28 18:00