deko wrote:
Quote:
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
==================