在無限分類應用中, 有時我們希望將得到的無限分類從數據庫中提取出來后生成樹形的數組, 這里看到一位PHP工程師的代碼, 感覺非常巧妙, 分享一下
1. 無限分類表格如下:
2. tp5的DB類讀取數據, 并將數據做一個轉化
3. makeTree函數如下:
5. 最終打印結果如下
附上代碼供拷貝:
public function index(Sortclass $sort){ $datas = Db::name("column")->where("id","<=",10) ->field("id,sortname,parentid") ->order("id desc") ->select(); $d = []; foreach($datas as $row){ $d[$row["id"]] = $row; //將每行的索引值 設置為 每行的ID } dump($this->makeTree($d)); } public function makeTree($datas){ $rowTree = []; foreach ($datas as $id=>$row){ if(isset($datas[$row["parentid"]])){ $datas[$row["parentid"]]["children"][] = $datas[$id]; //將所的有子類放到 父類 ID 對應數組的 children鍵名下 } else { $rowTree[] = $datas[$id]; } } return $rowTree; }