Hi, PMs. I am working on a minimally functional discussion forum that reads record/messages from a flatfile ASCII database. All the messages have relationships to other messages (i.e. parent and children messages), and I am trying to create a "tree" view for a list of messages. I sort of succeeded, but the messages are in the reverse order. I need help (in more ways than one at this point).
Each record has a record ID, a parent field, a space-delimited list of children for a field, and some message data fields. A function called &get_record takes a record id, and puts the record in a hash. I usually display records with a foreach loop.
The HTML display function for the tree view looks like:
# @ids are a list of record IDs to display. they're sorted by id beca +use newer messages have higher id numbers @sorted_ids = reverse sort { $a cmp $b } @ids; foreach (@sorted_ids) { # this function displays a tree for each id given. the function wil f +ollow. &do_tree ($_); } sub do_tree { # -------------------------------------------------------- # this is the tree loop that call itself to display records in # tree form. pass it some record ids and see what happens! my %rec = &get_record ($_[0]); my @children; my @kids = split (/ /, $rec{'Children'}); # get all the kids foreach $kid (@kids) { push (@children, $kid) if ($kid); } # remove +blanks if (@children) { # if kids then loop @sorted_children = sort { $a cmp $b } @children; print "<li>[$rec{'ID'}] $rec{'Subject'}<ul>\n"; foreach $child (@sorted_children) { # here, the function calls itself. is there a better way to do this o +r am i doing this wrong? &do_tree ($child); } print "</ul></li>\n"; } else { # no kids? actually display the record then print "<li>[$rec{'ID'}] $rec{'Subject'}</li>\n"; } }
When I take out the sorting code, things work. When the sorting code is in, the messages don't all display. I double-checked the database and the rest of my code, and I'm pretty sure the problem lies with how I wrote do_tree. I'm pretty stuck on this, and I've misplaced my Perl Cookbook. Any help would be greatly appreciated.
Currently, the forum can be found here.
- Leam
In reply to Recursion question... by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |