Hierarchie in eine geschachtelte ul umsetzen
Erwin
- perl
0 dante0 Andres Freund0 Erwin0 Andres Freund0 Erwin
Mahlzeit,
es gibt eine sortierte Gliederung einer Hierarchie like:
1
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
1.3
2
2.1
2.1.1
2.1.2
2.2
2.2.1
2.2.2
2.3
Nun, das Ganze soll mit PERL in einer ul, derart, dass die Unterpunkte eingerückt sind.
Ich komme hier einfach nicht weiter, hat jemand einen guten Lösungsansatz? Wie gesagt, sortiert ist die Liste schon.
Gruss, rolf
PS: Es geht um den Hauptindex der PerlBase.
Nun, das Ganze soll mit PERL in einer ul, derart, dass die Unterpunkte eingerückt sind.
mach doch die einrückungen mit css?
ich weiss nciht genau was jetzt deine frage ist.
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
Moin Andreas,
Danke Dir!
Ich würde es einfach mit einer rekursiven Funktion versuchen...
Ich hab mal schnell was zusammengeschrieben, was im Prinzip funktionieren sollte:
Hab mir den hack mal rauskopiert, es ist noch nicht ganz das... aber im Prinzip der richtige Ansatz: Es wird auf eine Rekursion hinauslaufen, ggf. werde ich die Indextabelle
http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=14&id=1
für die PerlBase, denn um die geht es mir ja, noch einmal überarbeiten müssen.
Gruss, Rolf
Hi,
für die PerlBase, denn um die geht es mir ja, noch einmal überarbeiten müssen.
Wieso? Ich sehe da jetzt kein großes Problem... Wenn du die Daten sowieso aus der Tabelle ausliest, kannst du sie auch gleich in eine geignete Struktur bringen, was aber eventuell mit hashes leichter zu realisieren ist.
Oder befürchtest du so starke Performance einbrüche deswegen?
Grüße, Andres Freund
Hi Andreas,
für die PerlBase, denn um die geht es mir ja, noch einmal überarbeiten müssen.
Wieso? Ich sehe da jetzt kein großes Problem... Wenn du die Daten sowieso aus der Tabelle ausliest, kannst du sie auch gleich in eine geignete Struktur bringen, was aber eventuell mit hashes leichter zu realisieren ist.
Genauso isses. Mittlerweile bin ich auch fast fertig mit der traverse-Funktion, aber ich muss das alles nochmal überschlafen, für heut ist Schluss ;-)
Oder befürchtest du so starke Performance einbrüche deswegen?
Neinneien, darum gings nicht. Ich dachte nur, dass ich an der Indextabelle was machen muss, oder gleich alles in einen einzige Tabelle tu'n soll. Aber so wie's aussieht bleiben die beiden Tabellen so wie'se sind - hat sich ja auch bewährt.
Viele Grüße, Rolf