Benutzer-Werkzeuge

Webseiten-Werkzeuge


programmieren:php:rekursives_sortieren_1

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 "<br>";
}
Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
programmieren:php (25 views) · Zuletzt geändert: 25/12/2020 12:15 von conny