本篇文章主要介紹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框架實現:并非打廣告?。?/p>
html' target='_blank'>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漢諾塔問題的遞歸算法實現和迭代算法實現
以上就是PHP遞歸算法詳解的詳細內容,更多請關注 其它相關文章!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答