Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung des rekursiven PHP-Algorithmus

Detaillierte Erklärung des rekursiven PHP-Algorithmus

墨辰丷
墨辰丷Original
2018-05-16 11:53:345370Durchsuche

Dieser Artikel stellt hauptsächlich die detaillierte Erklärung des rekursiven PHP-Algorithmus vor. Ich hoffe, dass er für alle hilfreich ist.

Wenn Sie auf eine Datenbankstruktur stoßen, die für Baumknoten entworfen werden muss, und auf eine Baumknoten-Datenstruktur, die ausgelesen werden muss! Wird sich jeder dafür entscheiden, eine Datenbankabfrage zu verwenden, um die Baumstruktur zu erhalten?

//曾经的数据库查询获取方式$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']);
}

//Erhalten Sie die Ergebnisse $res
Hinweis: Es muss gesagt werden, dass diese Methode zwar machbar ist, ihr Nachteil jedoch darin besteht, dass Sie die Anzahl der Ebenen und eine große Anzahl von Ausführungen festlegen müssen Abfragen in der Datenbank.
Ignorieren Sie nicht den Abfrageverbrauch der Datenbank. Es spielt keine Rolle, ob die Daten klein sind, aber die Datenmenge ist groß. Diese praktikable Methode wird eine große Belastung für das System darstellen!
Jeder muss also die Wahrheit verstehen. Manchmal sind Datenbankoperationen vorteilhafter als PHP-Programmalgorithmen, und manchmal ist das Gegenteil der Fall!
Im Fall dieses grundlegenden Baumknotens ist es am besten, einen Algorithmus zu verwenden.

PHP-Code-Algorithmus (CI-Framework-Implementierung: keine Werbung!)

  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;
}

//Der Vorteil davon ist, dass die Berechnungsgeschwindigkeit schnell, der Verbrauch gering und der Pegel variabel ist. Dies bedeutet, dass unabhängig davon, wie viele Ebenen in die Datenbank geschrieben sind, der Algorithmus erhalten werden kann
Ergebnis:

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
                            (
                            )

                    )

            )

    )
)

Verwandte Empfehlungen:

Hanno in Python implementiert basierend auf rekursiven Algorithmustürmen und Fibonacci-Sequenzen

Rekursive Algorithmusimplementierung des PHP Tower of Hanoi-Problems und Implementierung des iterativen Algorithmus

Rekursion des PHP Tower der Implementierung des Hanoi-Problemalgorithmus und der iterativen Algorithmusimplementierung

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des rekursiven PHP-Algorithmus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn