Archief - PHP: Recursive function optimaliseren

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

[Scratch]

Legacy Member
Hoi allemaal, kheb een klein recursive menutje in mekaar gestoken wat een menustructuur opbouwt adhv 1 tabel in een mysql database. Elk record in de tabel heeft een ander record in dezelfde tabel als parent. Nu speek ik bij elke loop van die functie de database aan, ik hoef dus niet te zeggen dat dit niet echt optimaal is indien je menu groot wordt. Iemand een idee hoe ik dit op een andere manier met maar 1 query kan doen?

PHP:
function buildMenu($parent = 0, $level = 0) {
global $db;
 
$query = "SELECT * FROM categories WHERE parent_id = $parent";
if ($menuItems = $db->get_results($query)) {
foreach ($menuItems as $item) {
	echo "<div class=\"level" . $level . "\">";
	echo $item->name_nl."</div>\n";
	buildMenu($item->id,$level+1);
}
} else {
return;
}
}

BertG

Legacy Member
$query = "SELECT * FROM categories WHERE parent_id = $parent";
$this->menuItems = $db->get_results($query)
PHP:
function buildMenu($parent = 0, $level = 0) {
global $db;
 
if (!empty($this->menuItems)) {
foreach ($this->menuItems as $item) {
	echo "<div class=\"level" . $level . "\">";
	echo $item->name_nl."</div>\n";
	buildMenu($item->id,$level+1);
}
} else {
return;
}
}

denk ik :)

[Scratch]

Legacy Member
En hoe leg je hier de parent/child relatie? Ik moet per hoofdcategorie de child nodes van die hoofdcategorie vinden, en daarna van het child nog eens de child nodes, enz ...
De menuitems staan niet in de juiste volgorde in de database dus denk ik niet dat dit zal werken :(
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan