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