Hallo,<br><br><div><span class="gmail_quote">2006/11/20, A. Pagaltzis &lt;<a href="mailto:pagaltzis@gmx.de">pagaltzis@gmx.de</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>&gt; push @{$h{$parent_id}}, $parent_id;</blockquote><div>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Ich glaube, du meinst eher
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;push @{ $h{ $parent_id } }, $node_id if $parent_id != -1;<br><br>Bzw., der Ordnung und Verständlichkeit halber:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;push @{ $children{ $parent_id } }, $node_id if $parent_id != -1;</blockquote><div><br>
klar:-)<br>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br><br>Oder du verzichtest auf den zweiten Hash und sagst, dass der 0te
<br>Eintrag im Array eines Knotens immer auf den Mutterknoten weist.<br>Massiv ändert sich der Code dadurch nicht:<br><br>&nbsp;&nbsp;&nbsp;&nbsp;$node{ $parent_id } ||= [ undef ];<br>&nbsp;&nbsp;&nbsp;&nbsp;push @{ $node{ $parent_id } }, $node_id if $parent_id != -1;
<br>&nbsp;&nbsp;&nbsp;&nbsp;$node{ $node_id }[ 0 ] = $parent_id;</blockquote><div>&nbsp;</div><br>Warum geht das? Ich meine, wenn du die parent_id an Stell 0 setzt, ueberschreibst Du doch eventuelle Kinder, das jedes Kind ja wiederum parent sein kann.
<br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Die erste Zeile sorgt dafür, dass das Array im Mutterknoten<br>mindestens einen Eintrag hat, bevor das `push` drauf losgelassen
<br>wird, damit die Indizes auch immer stimmen.<br><br>&gt; Jetzt muß ich irgendwie rekursiv einen neuen hash bauen.</blockquote><div>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Mir ist nicht klar, warum…</blockquote><div><br><br><br>Tja, ich hab mir die Tabelle immer als Tree vorgestellt und ueberlegt, wie ich Eine Datenstruktur aus n geschachtelten Hashes und Arrays erzeugen kann.<br>Deswegen war mir Michaels Ansatz total klar, aber am Sortieren waere ich haengen geblieben: was macht man mit childs, wenn das passende parent noch nicht gefunden ist? Was anderes als immer wieder ueber die Liste laufen, Node finden fuer die ein Parent existiert, aus der Liste nehmen und in den Tree eingehaengt fiel mir nicht ein.
<br><br><br>Jetzt brauchte ich uebrigens doch keinen Tree ueber die Nodes. Nur die Nodes ohne parent musste ich finden, also banal. Aber da das der table in der Datenbank ist mit dem ich am haefigsten zu tun habe, ist das sehr guenstig solche Skripte auf Lager zu haben.
<br><br>danke an Alle!<br><br>cheers Johannes.<br><br><br></div></div><br>