samoht Posted August 14, 2007 Share Posted August 14, 2007 hello again, I have a loop through my db looking for products: <?php if ($numProduct > 0 ) { $i = 0; while ($row = dbFetchAssoc($result)) { //lots of output for product info etc I want to group my products by the item they belong to - so I thought I would add a foreach loop: <?php if ($numProduct > 0 ) { $i = 0; while ($row = dbFetchAssoc($result)) { foreach() { //info about the item (name, etc) //all that product info I got before } My query looks like: SELECT i.Name as ItemName, pd.ProductId, pd.Name, pd.PriceRetail, pd.ImagetnURL, PackageType, QtyInStock FROM product pd, item i, productpackaging pdp, packaging pack WHERE pd.ItemId = i.ItemId AND pd.ProductId = pdp.ProductId AND pack.PackageId = pd.PackageId AND Pcode = 'RT' ORDER BY ItemName pd.Name could some one help me with the foreach set up?? Link to comment https://forums.phpfreaks.com/topic/64844-help-with-foreach/ Share on other sites More sharing options...
gurroa Posted August 14, 2007 Share Posted August 14, 2007 <?php $arProductsByItem = array(); if ($numProduct > 0 ) { $i = 0; while ($row = dbFetchAssoc($result)) { $arProductsByItem[$row['ItemName']] = $row; } } // example of later output if (count($arProductsByItem) > 0) { reset($arProductsByItem); while(list($Item,$arProd) = each($arProductsByItem)) { echo 'Item: '.$Item.' - Products: '; $prod = array(); reset($arProd); while(list(,$row) = each($arProd)) { $prod[] = $row['Name']; } echo Implode(", ", $prod); } } ?> Link to comment https://forums.phpfreaks.com/topic/64844-help-with-foreach/#findComment-323566 Share on other sites More sharing options...
samoht Posted August 14, 2007 Author Share Posted August 14, 2007 Thanks for the help! Can you explain what the $prod = array(); reset($arProd); while(list(,$row) = each($arProd)) { $prod[] = $row['Name']; } echo Implode(", ", $prod); is doing - and why it only outputs the first character of the field ?? My display should look something like, - img - Item: $ItemName product1 $Name : $PriceRetail product2 " ": " " etc, Link to comment https://forums.phpfreaks.com/topic/64844-help-with-foreach/#findComment-323608 Share on other sites More sharing options...
samoht Posted August 14, 2007 Author Share Posted August 14, 2007 Could I just change the inner loop to be something like: while($ItemId = $row['ItemId'] ){ echo "<br><a href=\"". $_SERVER['PHP_SELF'] . "?c=$catId&p=$ProductId" . "\">$Size $PackageType - </a>$PriceRetail"; } ??? Link to comment https://forums.phpfreaks.com/topic/64844-help-with-foreach/#findComment-323837 Share on other sites More sharing options...
gurroa Posted August 14, 2007 Share Posted August 14, 2007 If you don't want to wait for reply.. http://www.php.net/manual/en/index.php $prod = array(); // creates new empty array reset($arProd); // set array position to the first element while(list(,$row) = each($arProd)) { // this will take element from $arProd array on current position and push position to the next element $prod[] = $row['Name']; // add value from the $row array under the key 'Name' to the $prod array } echo Implode(", ", $prod); // print out all values in the $prod array split by ', ' string You can't use your while statement cause it will be an infinitive loop To print out data as you've mentioned use my previous construct with this output if (count($arProductsByItem) > 0) { reset($arProductsByItem); while(list($Item,$arProd) = each($arProductsByItem)) { echo 'Item: '.$Item.'<br />'; reset($arProd); while(list(,$row) = each($arProd)) { echo 'product'.$i.' '.$row['Name'].' : '.$row['PriceRetail'].'<br />'; ++$i; } echo '<br />'; } } Link to comment https://forums.phpfreaks.com/topic/64844-help-with-foreach/#findComment-323895 Share on other sites More sharing options...
samoht Posted August 14, 2007 Author Share Posted August 14, 2007 Thanks Again for the help. This is not exactly what I need - maybe because of my db query? Your code spits out a record for each field in my query that I SELECTED so it prints this: product0 C : C product1 2 : 2 product2 2 : 2 product3 C : C product4 0 : 0 product5 c : c product6 9 : 9 product7 2 : 2 ?? Link to comment https://forums.phpfreaks.com/topic/64844-help-with-foreach/#findComment-323911 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.