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.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.