Olinux,

> Yes, I know what a tree data structure is - how to
> "walk the tree" I'm not sure what you mean.

="Walk the tree" means using the logic of the 'pointers' in each row to work out which 
sub-categories fit within
each category...

But I've
> come up with something quite cool. but still not
> working.

=you haven't shown what the output should look like.
=having unloaded the entire database into an array (and assuming this is 
realistic/possible in the production
environment), there should be no need to go back to the database at all.
=do you have a particular reason for putting the data into an associative array? If 
you make the first
index/dimension into an enumerative array then the pointers in the data will work as 
array elements. What I mean
is, can you turn this schema:

> > > id | parentid | category
> > >  1 | 0 | blah1   top
> > >  2 | 1 | blah2   sub
> > >  3 | 1 | blah3   sub2
> > >  4 | 3 | blah4   sub2->sub

into a table thus:

$menu[1] = 0 | blah1   top
$menu[2] = 1 | blah2   sub
$menu[3] = 1 | blah3   sub2
$menu[4] = 3 | blah4   sub2->sub

Then use a loop to process each row in turn (using, eg index of $i) and when you wish 
to print/process $menu[3]
($i=3 and thus $menu[$i])  you search down the [parentid] column (loop index, eg $j) 
looking for ( $menu[ $j ] =
$menu[ $i ] )
- NB I'm making an assumption about the id-column data!

Ok, regardless, you appear to need an outer 'processing' loop to print each category, 
and an inner loop to pick
up each sub-category (if any exist).

=I'm feeling as if I've made a number of assumptions because I lack the data you know.
=Hope it helps,
=dn


> I select all the data from the catagories table [id |
> pid | category] and drop it into the array
>
> =====
> $menu = array();
>
> while ($row = mysql_fetch_array($result)) {
> $id = $row['cat_id'];
> $category = $row['category'];
> $pid = $row['pid'];
>
> $menu[$pid][$id] = $category;
> }
>
>
> foreach($menu as $key1 => $value1) {
>     echo "Key: $key1; Value: $value1<br>\n";
>    foreach ($value1 as $key2 => $value2) {
>   echo "Key: $key2; Value: $value2<br>\n";
> // delete array that has been printed
> unset($menu[$key1][$key2]);
> }
> }
> =====
>
> and out comes:
> Key: 0; Value: Array
> Key: 1; Value: Automotive
> Key: 4; Value: Technology
> Key: 1; Value: Array
> Key: 2; Value: Repair Shops
> Key: 3; Value: Glass Replacement
> etc..
>
> So now what i need is the ability to go thru all of
> the menu array with index of $menu[0][*] one at a time
> and then print out all $menu indicies where [*]
> matches $menu[THIS][]
> the unset removes a category once it's been printed
>
> Any ideas?
> I don't want to recursively hit the database a bunch
> of times.
>
> Thanks,
> olinux
>
> --- DL Neil <[EMAIL PROTECTED]> wrote:
> >
> > ----- Original Message -----
> > From: "olinux" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: 29 October 2001 08:16
> > Subject: [PHP-DB] category structure
> >
> >
> > > anyone have any ideas on this
> > >
> > > I have a table of directory categories
> > > id | parentid | category
> > >
> > > so...
> > >  1 | 0 | blah1   top
> > >  2 | 1 | blah2   sub
> > >  3 | 1 | blah3   sub2
> > >  4 | 3 | blah4   sub2->sub
> > >
> > > I want to hit the DB only once so i select all and
> > > drop into array
> > >
> > > Now i've created array with these like so:
> > > $category[$parentid][$id]
> > >
> > > But now what?
> > >
> > > trouble is that
> > > $msub[2][4] is a sub category of $msub[1][2]
> > > so i can't just run thru and print the array -
> > need to
> > > manipulate a little.
> > >
> > > Any ideas? [or even a beeter way to do this?]
> >
> > Olinux,
> >
> > What you are asking is a fairly common requirement,
> > with well-known solutions.
> > In what format do you require the output printed?
> > Do you know what a "tree" data structure is, and how
> > to 'walk the tree'?
> >
> > =dn
> >
>
>
> __________________________________________________
> Do You Yahoo!?
> Make a great connection at Yahoo! Personals.
> http://personals.yahoo.com
>


-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to