ホームページ  >  記事  >  バックエンド開発  >  PHPはツリー構造情報を効率的に取得します

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

WBOY
WBOYオリジナル
2016-06-13 13:14:131031ブラウズ

PHP はツリー構造情報を効率的に取得します
開発では、製品の複数レベルの分類、複数レベルのナビゲーション バー メニューなど、単純なツリー構造が保存されることがよくあります。これらのオブジェクトの特徴の 1 つは、通常、ツリー構造全体が取得されることです。ツリー構造をデータベースに保存するには、主に 3 つの方法があります。最も簡単な方法は、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;
    }
}

私の Weibo アドレス: http://weibo.com/jameren、誰でも歓迎です。注意してください、PHPはツリー構造情報を効率的に取得します
ちなみに宣伝をしましょう:

引用

私は最近、大容量の 15G 無料ネットワーク U ディスクを使用しました - PC で使用できる @ Cool Diskファイルの種類とサイズの制限、高速な転送速度、ファイルが失われることはありません。ぜひ一緒に体験してください。以下の招待リンクから登録すると、あなたも私も 256 MB の追加のディスク容量を獲得できます。 http://t.cn/aNLZje

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