您好,登錄后才能下訂單哦!
小編給大家分享一下PHP無限極分類函數怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
通過引用方式實現無限極分類
思路:
1.即所有待處理的數據進行包裝成下標為主鍵id(pk)的數組,便于有pid獲取對應的父欄目。
2.對包裝的數據進行循環,如果為根節點,則將其引用添加到tree中,否則,將其引用添加到其父類的子元素中。這樣雖然tree中,只是添加了根節點,但是每個根節點如果有子元素,其中包含了子元素的引用。故能形成樹型。
代碼如下
/** * 把返回的數據集轉換成Tree * @param array $list 要轉換的數據集 * @param string $pk 自增字段(欄目id) * @param string $pid parent標記字段 * @return array * @author dqs <1696232133@qq.com> */ function make_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){ $tree=array(); $packData=array(); foreach ($list as $data) { $packData[$data[$pk]] = $data; } foreach ($packData as $key =>$val){ if($val[$pid]==$root){//代表跟節點 $tree[]=& $packData[$key]; }else{ //找到其父類 $packData[$val[$pid]][$child][]=& $packData[$key]; } } return $tree; }
數據結構如下:
執行結果如下
Array ( [0] => Array ( [id] => 6 [pid] => 0 [title] => 測試1 [url] => test1 [sort] => 0 [create_time] => 1464076199 [update_time] => 1464076199 [status] => 1 [target] => 0 ) [1] => Array ( [id] => 7 [pid] => 0 [title] => 測試2 [url] => test2 [sort] => 0 [create_time] => 1464076218 [update_time] => 1464076218 [status] => 1 [target] => 0 ) [2] => Array ( [id] => 1 [pid] => 0 [title] => 首頁 [url] => Index/index [sort] => 1 [create_time] => 1379475111 [update_time] => 1379923177 [status] => 1 [target] => 0 ) [3] => Array ( [id] => 2 [pid] => 0 [title] => 博客 [url] => Article/index?category=blog [sort] => 2 [create_time] => 1379475131 [update_time] => 1379483713 [status] => 1 [target] => 0 [_child] => Array ( [0] => Array ( [id] => 4 [pid] => 2 [title] => 個人博客 [url] => ownblog [sort] => 0 [create_time] => 1464075558 [update_time] => 1464075558 [status] => 1 [target] => 0 [_child] => Array ( [0] => Array ( [id] => 8 [pid] => 4 [title] => 新浪博客 [url] => sinaBlog [sort] => 0 [create_time] => 1464077276 [update_time] => 1464077276 [status] => 1 [target] => 0 ) ) ) [1] => Array ( [id] => 5 [pid] => 2 [title] => 他人博客 [url] => otherBlog [sort] => 0 [create_time] => 1464075582 [update_time] => 1464075582 [status] => 1 [target] => 0 ) ) ) [4] => Array ( [id] => 3 [pid] => 0 [title] => 官網 [url] => http://www.onethink.cn [sort] => 3 [create_time] => 1379475154 [update_time] => 1387163458 [status] => 1 [target] => 0 ) )
附加OneThink中無限極分類函數
/** * 把返回的數據集轉換成Tree * @param array $list 要轉換的數據集 * @param string $pid parent標記字段 * @param string $level level標記字段 * @return array * @author 麥當苗兒 <zuojiazi@vip.qq.com> */ function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) { // 創建Tree $tree = array(); if(is_array($list)) { // 創建基于主鍵的數組引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key]; } foreach ($list as $key => $data) { // 判斷是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] =& $list[$key]; }else{ if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; } } } } return $tree; }
通過遞歸方式實現無限極分類
思路:
1.使用循環,分別獲取所有的根節點。
2.在獲取每個節點的時候,將該節點從原數據中移除,并遞歸方式獲取其所有的子節點,一直原數據為空。
代碼實現如下:
function make_tree1($list,$pk='id',$pid='pid',$child='_child',$root=0){ $tree=array(); foreach($list as $key=> $val){ if($val[$pid]==$root){ //獲取當前$pid所有子類 unset($list[$key]); if(! empty($list)){ $child=make_tree1($list,$pk,$pid,$child,$val[$pk]); if(!empty($child)){ $val['_child']=$child; } } $tree[]=$val; } } return $tree; }
效果截圖如下:
以上是“PHP無限極分類函數怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。