在多个场合使用来自Foreach的数组

时间:2013-04-09 20:21:41

标签: php arrays foreach

我在尝试提供来自阵列的一些信息时遇到了问题。

我有foreach检查我网站中的n会话,然后我为每个会话调用数据库并加载一系列项目。

foreach出来之后,我想依次使用相同的数组逐一显示项目,但我只看到最后一项n次。 / p>

基本上,在第二个foreach中,$row2['name']$row2['price']仅显示n次,但始终是表格的最后一项。

foreach ($_SESSION['cart'] as $item) 
{ 
$pid = $item['itemId'];
$q = $item['qty'];
if($q==0) continue;
$query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
$query2-> bindValue (':idItem',$pid);
$query2->execute();
$row2 = $query2->fetch(PDO::FETCH_ASSOC);
SOME HTML STUFF....
}

这里有一些独立的HTML:

foreach ($_SESSION['cart'] as $item)    
{
   $pid = $item['itemId'];
   $q = $item['qty'];
HTML <div class="subTotalItem">
   <span class='cartItemsText'><?php echo **$row2['name']**; ?></span>
<span class='cartItemsText2'><?php echo $q." x "." $".$**row2['price'];** $subTotal+= $row2['price'] * $q; ?></span>
    </div>
}

知道问题可能在哪里?

4 个答案:

答案 0 :(得分:2)

将您的“东西以后显示”存储在字符串中,并在需要的地方回显。

$subtotalStuff = "";

foreach ($_SESSION['cart'] as $item) { 
    $pid = $item['itemId'];
    $q = $item['qty'];
    if($q==0) continue;

    $query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
    $query2-> bindValue (':idItem',$pid);
    $query2->execute();
    $row2 = $query2->fetch(PDO::FETCH_ASSOC);

    $subtotalStuff .= "<div class='subTotalItem'><span>" . $row2['name'] . "</span><span>" . $q . " x " . " $" . row2['price'] . "</span></div>\r\n";
    $subTotal+= $row2['price'] * $q;

    SOME HTML STUFF....
}

echo $subtotalStuff;
echo $subTotal;

答案 1 :(得分:0)

不是PDO配置为PDO的预准备语句的默认选项:: ATTR_CURSOR =&gt; PDO :: CURSOR_FWDONLY?如果我是对的,那意味着你必须再次运行相同的查询来编写代码的HTML部分。

我没有使用可逆游标的经验,但它有一个选项。

答案 2 :(得分:0)

我只能假设您在省略的“SOME HTML STUFF”部分中某处设置了$ _SESSION ['cart']变量。我这样说是因为查看你的代码,我希望$ _SESSION ['cart']与第一个foreach的第二个foreach具有相同的确切值。

答案 3 :(得分:0)

你应该在与查询相同的循环中打印出来,每次循环时都会重置$ row2。

foreach ($_SESSION['cart'] as $item) 
{ 
 $pid = $item['itemId'];
$q = $item['qty'];
if($q==0) continue;
$query2 = $con -> prepare("SELECT * FROM item_descr WHERE id_item = :idItem");
$query2-> bindValue (':idItem',$pid);
$query2->execute();
$row2 = $query2->fetch(PDO::FETCH_ASSOC);

SOME HTML STUFF....


Put your HTML output here, not in second loop

 }

这应该有效