【问题标题】:How can i display an array outside the for each loop?如何在 for each 循环之外显示一个数组?
【发布时间】:2011-09-27 18:09:06
【问题描述】:

所以我有一个可以正常工作的购物车,但我想在 for each 循环之外的联系表单中显示购物车的结果。

我遇到的问题是,每当我尝试显示 $Ptitle 时,它​​只会显示购物车的最后添加内容。不是数组内的完整标题列表。我尝试了各种方法来显示数组结果,但似乎都不起作用。看来我可以通过

打印数组
print_r ($contents);

但仅限于 for each 循环内部,而不是外部。 下面是代码,如有乱码请见谅。任何帮助将不胜感激。

谢谢!

function showCart() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
    $items = explode(',',$cart);
    $contents = array();
    foreach ($items as $item) {
        $contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1: 1;

    }
    echo '<form action="http://www.changecompanies.net/dev/theme/cart_checkout.php?action=update" method="post" id="cart">';
    //$output[] = '<table>';
    ?>
    <table id="cart">
                <tr>
                    <th>Quantity</th>
                    <th></th>
                    <th>Item</th>
                    <th>Product Type</th>
                    <th>Unit Price</th>
                    <th>Total</th>
                    <th>Remove</th>
                </tr>
    <?php
    foreach ($contents as $id=>$qty) {



        $sql = 'SELECT * FROM tccproducts WHERE id = '.$id;
        $result = $db->query($sql);
        $row = $result->fetch();
        extract($row);

        $result = mysql_query("SELECT * FROM tccproducts WHERE Pid ='$id'")or die (mysql_error());
        //if (!$result);
        //echo "no result";
        $myrow = mysql_fetch_array($result) or mysql_error('error!');
        $name = $myrow['Ptitle'];
        //$name = substr($name,0,40);
        $Pprice = $myrow['Pprice'];
        $Ptitle = $myrow['Ptitle'];
        $Pimage = $myrow['Pimage'];
        $Pcat = $myrow['Pcategory'];
        $mini = $myrow['Pminimum'];

Rest 只显示购物车并结束 for each 循环。

【问题讨论】:

  • 为什么不能将数组转储到 foreach 循环之外?
  • 这是我的问题星际......我可以显示数组,但我不知道如何从中获取正确的值......例如我可以显示“Pids”A9, A9,A9,B12,B12,B12 一样,如果每个有 3 个产品。但是我如何挖掘这些数字并将购物车上列出的标题、价格以及基本上所有其他内容显示到电子邮件消息中?

标签: php arrays shopping-cart


【解决方案1】:

您正在对购物车中的所有商品运行循环,获取有关该商品的详细信息,然后将详细信息存储在各个变量中。在循环的每次迭代中,您之前检索的数据都会被获取的下一行数据覆盖。因此,您只存储从最后一个获取的项目中获取的数据。

如果要存储所有项目数据,则必须将每一行存储在一个箭头中并在之后输出,或者只在获取时输出每一行。

while($row = mysql_fetch(...)) {
     echo <<<EOL
<tr>
    <td>{$quantity}</td>
    <td>{$row['price']}</td>
    etc...
</tr>
EOL;
}

【讨论】:

  • 我明白你的意思。除了用户“添加”到他的购物车的结果存储在会话变量购物车中。那么为什么我不能只引用该变量并再次显示它呢?如果我要使用您的解决方案,我会在 foreach 之外还是在它内部实现 while?
  • 我可以对你的方法 Marc 使用一种变体。基本上,创建了一个新函数并调用它来重复购物车变量……本质上是一个具有不同显示方法的单独循环。效果很好!谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2011-05-12
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多