phpbar.de logo

Mailinglisten-Archive

[php] Array aus Rekursion

[php] Array aus Rekursion

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Nov 20 16:25:57 CET 2007


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."&nbsp;&nbsp;&nbsp;&nbsp;");
>   }
> }
>
>
> Wie m�sste ich vorgehen, wenn ich als Resultat ein Array haben
> m�chte? Sprich anstatt '&nbsp;' 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