|
Posted by Jerry Stuckle on 02/27/07 11:08
deko wrote:
> I need to loop through a number of categories (in object $category) and
> compare items (from object $itemdata) to create a list of items
> organized by category.
>
> foreach ($category as $cat_item)
> {
> echo $cat_item->cat_name;
> foreach ($itemdata as $item_datum)
> {
> if ($item_datum->category_id == $cat_item->cat_id)
> {
> echo '--'.$item_datum->item_name;
> }
> }
> }
>
> The output should look something like this:
>
> Apples (cat_name)
> -- red (item_name)
> -- green
> -- small
> -- large
>
> Oranges
> -- ripe
> -- rotten
>
> The $category and $itemdata objects are created using ezSQL:
>
> $category = $db->get_results("SELECT cat_id, cat_name ... FROM Table_A");
>
> $itemdata = $db->get_results("SELECT category_id, item_name ... FROM
> Table_B");
>
> My question is this:
>
> How do I optimize this?
>
> Once an $item_datum->category_id has been matched to a
> $cat_item->cat_id, I no longer need that row ($item_datum) in the
> $itemdata object, so further iterations of the nested foreach loop need
> not include the previously matched $item_datum.
>
> How do I remove the matched $item_datum from the $itemdata object after
> it has been matched?
>
> Will this reduce iterations of the nested foreach loop?
>
> Thanks in advance.
>
I don't use ezSQL, but you should be able to get all of your items by
category id, i.e.
SELECT cat_id, cat_name, item_name ... FROM Table_A, Table_B WHERE
TableA.cat_id = Table_B.category_id ORDER BY cat_name, item_name
Or similar. Now just go through the list. Every time your cat_name
changes, output cat_name followed by item_name. If cat_name doesn't
change, just output item_name.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Navigation:
[Reply to this message]
|