php 擷取ip:php高效擷取樹結構資訊

來源:互聯網
上載者:User

  在開發中,經常有一些簡單的樹形結構的儲存,比如產品的多級分類,多級導覽列菜單等,這些物體有一個特性,就是通常會擷取整棵樹結構。在資料庫裡儲存樹結構的方法主要有三種,最簡單的一就是通過一個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;
}
} 本文連結http://www.cxybl.com/html/wlbc/Php/20120607/28514.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.