この記事では主にPHPの再帰アルゴリズムについて詳しく説明していますので、興味のある方は参考にしていただければ幸いです。
ツリー ノード用に設計する必要があるデータベース構造と、読み出す必要があるツリー ノード データ構造に遭遇したとき。ツリー構造を取得するためにデータベース クエリを使用することを誰もが選択しますか?
//曾经的数据库查询获取方式$res = $this->db->query("select * from menu where pid = 0");foreach($res as $k=>$v){ $res[$k]['child'] = $this->db->query("select * from menu where pid =".$v['id']); }
//結果を取得 $res;
注: この方法は実際に実行可能であると言わざるを得ませんが、データベース内のレベル数と実行中のクエリの数を修正する必要があるという欠点があります。
データが小さい場合でも、データ量が大きい場合でも、データベースのクエリ消費を無視しないでください。この実現可能な方法はシステムに多大な負担をもたらします。
したがって、誰もが真実を理解する必要があります。データベース操作の方が PHP プログラムのアルゴリズムより有益な場合もあれば、その逆の場合もあります。
この基本的なツリーノードの場合、アルゴリズムを使用するのが最善です。
PHP コードアルゴリズム (CI フレームワークの実装: 広告ではありません!)
public function getMenus(){ //查询 $res = $this->db->get('menu')->result_array(); $res = $this->getChild($res); print_r($res); }/** * 递归 树节点算法 * @param array $array * @param number $pid */private function getChild($array,$pid = 0){ $data = array(); foreach ($array as $k=>$v){ //PID符合条件的 if($v['pid'] == $pid){ //寻找子集 $child = $this->getChild($array,$v['id']); //加入数组 $v['child'] = $child?:array(); $data[] = $v;//加入数组中 } } return $data; }
//この利点は、計算速度が速く、消費量が少なく、レベルが可変であることです。これは、データベースにいくつのレベルが書き込まれても、このアルゴリズムを取得できることを意味します。 結果:
Array( [0] => Array ( [id] => 1 [title] => PHP中文网 [pid] => 0 [sort] => 0 [child] => Array ( ) ) [1] => Array ( [id] => 2 [title] => 系统设置 [pid] => 0 [sort] => 99 [child] => Array ( [0] => Array ( [id] => 4 [title] => 权限管理 [pid] => 2 [sort] => 2 [child] => Array ( ) ) [1] => Array ( [id] => 5 [title] => 菜单栏目 [pid] => 2 [sort] => 0 [child] => Array ( ) ) [2] => Array ( [id] => 3 [title] => 管理员 [pid] => 2 [sort] => 99 [child] => Array ( ) ) ) ) )関連する推奨事項:
再帰アルゴリズムに基づいて Python で実装されたハノイの塔とフィボナッチ数列
タワーPHPにおけるハノイ問題の再帰アルゴリズムの実装と反復アルゴリズムの実装
PHPハノイの塔問題の再帰アルゴリズムの実装と反復アルゴリズムの実装
以上がPHP再帰アルゴリズムの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。