首頁 > 後端開發 > php教程 > PHP遞歸演算法詳解

PHP遞歸演算法詳解

墨辰丷
發布: 2023-03-25 21:50:01
原創
5416 人瀏覽過

本篇主要介紹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漢諾塔問題的遞歸演算法實作與迭代演算法實作

以上是PHP遞歸演算法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板