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>";
}
Diese Website verwendet nur für den Betrieb notwendige Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer sowie den Datenschutzbestimmungen zu. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
programmieren:php (230 views) · Zuletzt geändert: 25/12/2020 12:15 von conny

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki