Andres Freund: Hierarchie in eine geschachtelte ul umsetzen

Beitrag lesen

Hi Rolf,

Ich komme hier einfach nicht weiter, hat jemand einen guten Lösungsansatz? Wie gesagt, sortiert ist die Liste schon.

Hm, ich weiss nicht, ob ich dein Problem jetzt richtig verstanden habe, aber eigentlich sollte das doch rel. einfach zu lösen sein, oder?
Ich würde es einfach mit einer rekursiven Funktion versuchen...
Ich hab mal schnell was zusammengeschrieben, was im Prinzip funktionieren sollte:
my @struktur = (2,4,[1,3,[2,3,4]],2,1);
#Jedes Element des Array, stellt ein Teil der Hierarchie dar, wenn ein Element
#wieder ein Array ist, wird die Funktion einfach wieder aufgerufen....

my @struktur = (2,4,[1,3,[2,3,4]],2,1);
#Jedes Element des Array, stellt ein Teil der Hierarchie dar, wenn ein Element
#wieder ein Array ist, wird die Funktion einfach wieder aufgerufen....
recurse(@struktur);
sub recurse{
  my $i=0;
  my $cnt=0;
  foreach (@{$_[0]}){
    print "<ul>\n";
    print "<li>",++$cnt,"</li>\n";
    if (ref($_) ne "ARRAY"){
      print "<ul>\n";
      for($i=0;$i<$_;$i++){
 print "<li> ",$i+1," </li>\n";
      }
      print "</ul>\n";
    }
    else{
      recurse($_);
    }
    print "</ul>\n";
  }
}

Die Datenstruktur wirst du natürlich noch anpassen müssen, aber das sollte ja eigentlich rel. einfach sein. Wenn du die Unterelemente in der form x.y.z haben willst, würde ich das am ehesten mit einem als Stack benutzen Array machen, dh. immer bei einer neuen Rekursion, die aktuelle Zahl pushen, und beim verlassen popen ;-)

Grüße Andres Freund