PHP高效獲取樹結構信息

巴扎黑
發布: 2016-11-23 15:46:35
原創
1098 人瀏覽過

在開發中,經常有一些簡單的樹形結構的存儲,比如產品的多級分類,多級導航欄菜單等,這些物體有一個特性,就是通常會獲取整棵樹結構。在資料庫裡保存樹結構的方法主要有三種,最簡單的一就是透過一個father_id指向目前結構的父節點。對於這樣的小結構,一般我們會使用最簡單的方式來儲存。
  當要取得整棵樹結構,網路上一般用遞歸法,這種方式程式碼簡單易懂,但是缺點是需要執行多次資料庫查詢,而且後面幾次取得的元素數量很少甚至為0,效率很差。 
  其實,遇到這種情況,可以將所有的元素全部從資料庫取得出來,然後再根據取得的元素father_id建構樹狀結構,這樣就可以解決執行多次資料庫查詢的效能損耗。以下就以我在實際專案中取得多層導覽列選單中的函數進拋磚引玉了 

/*
通过数据库获取所有元素,通过下面函数构造树形结构
*/
private function getTree($menus)
{
    $id = $level = 0;
$menuobjs=array();
    $tree = array();
$notrootmenu=array();
    foreach($menus as $menu){
       $menuobj=new stdClass();
$menuobj->menu=$menu;
    $id = $menu['id'];
$level = $menu['father_id'];
$menuobj->nodes = array();
$menuobjs[$id]=$menuobj;
if ($level) {
$notrootmenu[]=$menuobj;
} else {
$tree[] = $menuobj;
}
    }
foreach($notrootmenu as $menuobj){
$menu=$menuobj->menu;
$id = $menu['id'];
$level = $menu['father_id'];
$menuobjs[$level]->nodes[]=$menuobj;
}
    return $tree;
    }
}
登入後複製


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!