Php 在多种情况下使用Foreach中的数组

Php 在多种情况下使用Foreach中的数组,php,arrays,foreach,Php,Arrays,Foreach,我在尝试呈现来自数组的某些信息时遇到问题 我有一个foreach来检查站点中的n会话,然后为每个会话调用数据库并加载一个项目数组 从foreach出来后,我想按顺序使用相同的数组再次逐个显示项目,但是我只看到最后一个n次 本质上,在第二个foreach中,$row2['name']和$row2['price']仅显示n次数,但始终是表中的最后一项 foreach ($_SESSION['cart'] as $item) { $pid = $item['itemId']; $q = $item

我在尝试呈现来自数组的某些信息时遇到问题

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

foreach
出来后,我想按顺序使用相同的数组再次逐个显示项目,但是我只看到最后一个
n

本质上,在第二个
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>
}
foreach($\u会话['cart']作为$item)
{
$pid=$item['itemId'];
$q=$item['qty'];
HTML
}

知道问题可能在哪里吗?

对于PDO配置为PDO::ATTR\u CURSOR=>PDO::CURSOR\u FWDONLY的准备语句,不是默认选项吗?如果我是对的,这意味着您必须再次运行相同的查询,以组成代码的HTML部分


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

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

您应该在与查询相同的循环中打印,$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

 }
这应该可以用

将“稍后显示的内容”存储在字符串中,并在需要的地方回显

$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;
$subtotalStuff=”“;
foreach($_会话['cart']作为$item){
$pid=$item['itemId'];
$q=$item['qty'];
如果($q==0)继续;
$query2=$con->prepare(“从项目描述中选择*,其中id项目=:idItem”);
$query2->bindValue(':idItem',$pid);
$query2->execute();
$row2=$query2->fetch(PDO::fetch_ASSOC);
$subtotalStuff.='.$row2['name'].'.$q.'x.'.$'.row2['price'].'\r\n“;
$subTotal+=$row2['price']*$q;
一些HTML的东西。。。。
}
echo$小计;
echo$小计;

在第一个foreach完成后,$row2将包含从上次查询中检索到的行。您需要再次运行查询或将foreach循环合并为一个。这是页面的两个单独的HTML区域,我需要将foreach分开,因为否则我的HTML无法正确打印$subtotalStuff应该使用foreach显示n次,这就是为什么每个$subtotalStuff应该有2个foreach$subtotalStuff是所有
n
行的串联,所以不需要2个foreach