|
Posted by deko on 02/27/07 19:11
> 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.
Unfortunately, the problem is more complex than those example queries make it
look (they were simplified for clarity).
ezSQL aside, I think the issue is removing an item from an object in PHP. I'm
assuming there's a way to do this... (?)
[Back to original message]
|