ホームページ >php教程 >php手册 >php は ip を取得します: php はツリー構造情報を効率的に取得します

php は ip を取得します: php はツリー構造情報を効率的に取得します

WBOY
WBOYオリジナル
2016-06-21 08:51:391814ブラウズ

開発では、製品の複数レベルの分類、複数レベルのナビゲーション バー メニューなど、単純なツリー構造が保存されることがよくあります。これらのオブジェクトの特徴の 1 つは、通常、ツリー構造全体を取得することです。ツリー構造をデータベースに保存するには、主に 3 つの方法があります。最も簡単な方法は、father_id を通じて現在の構造の親ノードを指す方法です。このような小さな構造の場合、通常は最も単純な方法で保管します。
ツリー構造全体を取得したい場合、インターネットでは再帰的手法が一般的ですが、この手法はコードがシンプルで分かりやすいですが、複数のデータベースクエリが必要となり、その数が多くなるのが欠点です。次の数回で取得される要素は非常に小さいか 0 であり、非効率です。非常に貧弱です。
実際、この状況が発生した場合は、データベースからすべての要素を取得し、取得した要素 Father_id に基づいてツリー構造を構築することで、複数のデータベース クエリを実行することによるパフォーマンスの低下を解決できます。以下は、実際のプロジェクトでマルチレベルのナビゲーションバーメニューを取得するために使用した関数の紹介です
/*
データベースからすべての要素を取得し、次の関数でツリー構造を構築します
*/
プライベート関数 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



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。