| 
	
 | 
 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] 
 |