Heim > Artikel > Backend-Entwicklung > Detaillierte Erklärung des rekursiven PHP-Algorithmus
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
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!