===== rekursives sortieren Version 1 ===== für die Erstellung eines Menüs mit Nummierung Beispiel einer rekursive Abfrage einer Datenbank um ein Menü aufzubauen und die Ausgabe mit Nummierung zu bekommen Beispiel: Datenbank id - parent_id -title class Node { var $nParent; var $strName; var $arrChapter; var $arrChild; public function __construct($__nParent,$__strName) { $this->nParent =$__nParent; $this->strName =$__strName; $this->arrChild=array(); $this->arrChapter =array(); } public function addChild($__oNode) { array_push($this->arrChild,$__oNode); } } // SQL Abfrage erstellen if ($published) { $where = ' WHERE published = 1'; } else { $where = ''; } $query = 'SELECT *, id AS value, title AS text' .' FROM #__quickfaq_categories' .$where .' ORDER BY parent_id, ordering'; // Datenbank Abfrage $db =& JFactory::getDBO(); $db->setQuery($query); $result = $db->loadObjectList(); // Felder auslesen und einem Array zuweisen foreach ($result as $row) { $arrItem[$row->id] = array( '0' => $row->id, '1' => $row->parent_id, '2' => $row->title ); } $arrNode=array(); foreach($arrItem as $arrData) $arrNode[$arrData[0]]=new Node($arrData[1],$arrData[2]); // Baumstruktur aufbauen: foreach($arrNode as $nI => $oNode) if(($nParent=$oNode->nParent)>0) $arrNode[$nParent]->addChild($oNode); function cap($__oNode,$__arrChapter,&$__arrResult) { // Rekursiv alle Elemente durchlaufen: array_push($__arrResult,array(implode('.',$__oNode->arrChapter),$__oNode->strName)); $nCap=1; foreach($__oNode->arrChild as $oNode) { $oNode->arrChapter=array_merge($__arrChapter,array($nCap)); cap($oNode,$oNode->arrChapter,$__arrResult); ++$nCap; } } // Root-Elemente: $arrResult=array(); $nCap=1; foreach($arrNode as $oNode) if($oNode->nParent==0) { $oNode->arrChapter[0]=$nCap; cap($oNode,$oNode->arrChapter,$arrResult); ++$nCap; } // Aufbau für MooTree for ($i=0; $i < count($arrResult); $i++){ echo $arrResult[$i][0]; // zweites Array ist 0=Nr 1=Name echo $arrResult[$i][1]; // zweites Array ist 0=Nr 1=Name echo "
"; }