本篇主要介紹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基於遞歸演算法實現的漢諾塔與Fibonacci數列
以上是PHP遞歸演算法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!