Heim > Backend-Entwicklung > PHP-Tutorial > PHP erhält effizient Baumstrukturinformationen

PHP erhält effizient Baumstrukturinformationen

巴扎黑
Freigeben: 2016-11-23 15:46:35
Original
1223 Leute haben es durchsucht

In der Entwicklung werden häufig einige einfache Baumstrukturen gespeichert, z. B. mehrstufige Klassifizierung von Produkten, mehrstufige Navigationsleistenmenüs usw. Ein Merkmal dieser Objekte besteht darin, dass sie normalerweise die gesamte Baumstruktur erhalten. Es gibt drei Hauptmethoden zum Speichern einer Baumstruktur in der Datenbank. Die einfachste besteht darin, über eine Father_ID auf den übergeordneten Knoten der aktuellen Struktur zu verweisen. Für solch kleine Strukturen verwenden wir im Allgemeinen die einfachste Art der Speicherung.
Wenn Sie die gesamte Baumstruktur erhalten möchten, wird im Internet im Allgemeinen die rekursive Methode verwendet. Der Code dieser Methode ist einfach und leicht zu verstehen. Der Nachteil besteht jedoch darin, dass mehrere Datenbankabfragen erforderlich sind Die in den nächsten paar Malen erhaltenen Elemente sind sehr klein oder sogar 0, was ineffizient ist. Sehr schlecht.
Tatsächlich können Sie in dieser Situation alle Elemente aus der Datenbank abrufen und dann eine Baumstruktur basierend auf dem erhaltenen Element vater_id erstellen, wodurch der Leistungsverlust beim Ausführen mehrerer Datenbankabfragen behoben werden kann. Das Folgende ist ein Verweis auf die Funktion, die ich verwendet habe, um das mehrstufige Navigationsleistenmenü im eigentlichen Projekt zu erhalten

/*
通过数据库获取所有元素,通过下面函数构造树形结构
*/
private function getTree($menus)
{
    $id = $level = 0;
$menuobjs=array();
    $tree = array();
$notrootmenu=array();
    foreach($menus as $menu){
       $menuobj=new stdClass();
$menuobj->menu=$menu;
    $id = $menu['id'];
$level = $menu['father_id'];
$menuobj->nodes = array();
$menuobjs[$id]=$menuobj;
if ($level) {
$notrootmenu[]=$menuobj;
} else {
$tree[] = $menuobj;
}
    }
foreach($notrootmenu as $menuobj){
$menu=$menuobj->menu;
$id = $menu['id'];
$level = $menu['father_id'];
$menuobjs[$level]->nodes[]=$menuobj;
}
    return $tree;
    }
}
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage