http://www.perlmonks.org?node_id=281000

norbu09 has asked for the wisdom of the Perl Monks concerning the following question:

the problem i want to solve is the dynamic creation of a hashed tree from the result of a database query. i tried to solve it with arrays only the success was minor. what i need is a tree of the following scheme:
root => node1 => node2 => node2.1 => node2.2 => node3
the problem is that the structure has no defined depth. and btw, though it looks like another forum aproach it isn't. :)

here is what i tried:

for (my $i=0; $i < $counter; $i++) { my $result = $sth->fetchrow_hashref (); # root node if (scalar @path == 0) { $offset = $result->{'lvl'} - 1; push @path, $result->{'payload'}; push @tree, $result->{'payload'}; next; } # child node else { # going down (one step only) if (($result->{'lvl'} - $offset) > scalar @path) { my $last = $path[$#path]; push @path, $result->{'payload'}; push @{$tree[$#path][0]}, $result->{'payload'}; $a_counter = 0; } # same level elsif (($result->{'lvl'} - $offset) == scalar @path) { my $last = $path[$#path -1]; push @{$tree[$#path][$a_counter]}, $result->{'payload' +}; $a_counter++; } # going up else { my $steps = scalar @path - $result->{'lvl'} + ($offset + -1); $#path = $steps; push @path, $result->{'payload'}; my $last = $path[$#path]; push @{$tree[$#path][0]}, $result->{'payload'}; $a_counter = 0; } }
the result as you may figure out is a array with tree arrays in it without assotiation to the parent.
the database structure is a nested set as found at celko's "sql for smarties", just modified to have more smaller trees instead of one giant one to speed up inserts.