![]() Mailinglisten-Archive |
Hallo Michael, Am Dienstag, 20. November 2007 schrieb Michael Borchers: > http://www.php-homepage.de/artikel/artikel13.html > > Zu folgendem Beispiel eine Frage: > > Tabelle "Stammbaum" > > Id name nachfahre_von > 1 Opa August 0 > 2 Onkle Karl 1 > 3 Tante Ute 1 > 4 Cousin Maik 2 > 5 Cousine Inge 3 > 6 Mutter 1 > 7 Ich 6 > 8 Mein Bruder 6 > 9 Sohn meines Bruders 8 > > > M�chte man nun z.B. diese Baumstruktur geordnet uns strukturiert > ausgeben lassen, geht dies wiederum mit einer rekursiven Funktion: > > function get_tree($who,$ebene) { > $res=mysql_query ("select * from stammbaum where > nachfahre_von=$who;"); while ($verwandter=mysql_fetch_array($res)) { > echo $ebene.$verwandter[name]."<br>"; > get_tree($verwandter[id],$ebene." "); > } > } > > > Wie m�sste ich vorgehen, wenn ich als Resultat ein Array haben > m�chte? Sprich anstatt ' ' geht der Zeiger des Arrays weiter auf > eine n�chste Ebene... > > > Opa August > Onkel Karl > Cousin Maik > Tante Ute > Cousine Inge > Mutter > Ich > Mein Bruder > Sohn meines Bruders > > > => > > Opa August w�re dann z.B. [0] und Onkel Karl [0][0]. > Cousin Mail w�re [0][0][0] w�hrend Tante Ute [0][1] sein m�sste etc. > > Versteht ihr was ich meine? > > Besten Dank, wenn mir das jmd. erkl�ren k�nnte! ich habe das mal so gel�st: public function getKeywordHierarchy(array $aKeywordIndexNode, array &$aHierarchicalIndexNode, $iKeywordParentId) { foreach ($aKeywordIndexNode as $iKey => $aKeywordIndexNode_i) { if ($aKeywordIndexNode_i['KeywordParentId'] == $iKeywordParentId) { unset($this->aKeywordIndexNode_tmp[$iKey]); $aKeywordIndexNode_i['aSubNodes'] = array(); $this->getKeywordHierarchy($this->aKeywordIndexNode_tmp, $aKeywordIndexNode_i['aSubNodes'], $aKeywordIndexNode_i['KeywordId']); $aHierarchicalIndexNode[] = $aKeywordIndexNode_i; } } return $aHierarchicalIndexNode; } Aufruf: $aKeywordIndexNodes = $this->getKeywordHierarchy($this->aKeywordIndexNode_tmp, array(), 0); Ich kopiere das jetzt einfach mal so hier herein, weil ich gerade keine Zeit f�r eine ausf�hrliche Erkl�rung habe. Ich hoffe, Du kommst trotzdem so damit zu recht. Das unset() dient �brigens dazu, nicht mehr ben�tigte Daten zu entfernen und damit die Schleifendurchl�ufe soweit wie m�glich zu reduzieren. Viele Gr��e, Lutz
php::bar PHP Wiki - Listenarchive