foreach内部循环

eanckbw9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(302)

上下文:我有一个排序表单,它有一个html select和一个数字输入。因此,用户选择项目并输入他们想要的项目数量,这些将作为数组发送到hander页面。 $_POST['item']; 是一个id数组,我想用它从数据库中选择产品信息。 $amount = $_POST['amount']; 只是每个项目数量的数组。
问题:每一行都是按行的数量复制的,所以在本例中,它返回三行,但每一行重复三次。
目标:我要做的就是 $_POST['item'] 从数据库中获取这些行的数据,并在表中显示它们和相应的数量,这样用户就可以确认顺序。
句柄.php

<?php 
$item = $_POST['item']; // array of product ids to select data from db
$amount = $_POST['amount']; // array of amounts of each product the user ordered
$note = $_POST['note'];
$i = 0;

$each = implode(',',$item);

$stmt = $dbh->query('SELECT * 
          FROM `products` 
         WHERE `id` IN (' . $each . ')');

        <table class="table">
          <thead>
            <tr>
              <th scope="col">Item</th>
              <th scope="col">Quantity</th>
              <th scope="col">Price</th>
            </tr>
          </thead>
          <tbody>

    <?php 
while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {

    $product_id = $row['id'];
    $product_name = $row['name'];
    $product_price = $row['price'];
    $row['quantity'] = $amount[$row['id']];

    print "<pre>";
    print_r($row);
    print "</pre>";
    ?>

    <tr>
     <td><?php echo $product_name;?></td>
     <td><?php echo $row['quantity'];?></td>
     <td><?php echo $product_price;?></td>
    </tr>

<?php } ?>
              </tbody>
            </table>
g6ll5ycj

g6ll5ycj1#

我不确定你想做什么,但你正在重新分配任务

$key = array() ;

在你的

foreach ($amount as $key)

那会导致你

<td><?php echo $key;?></td>

试图回显数组,因为您重写了foreach指定的$key的值。
你的帖子没有详细说明什么数据被复制,所以我不能在这个答案中真正解决这个问题。
您正在复制相同的三行,因为您正在设置

$new = array_combine($item, $amount);

然后您的sql正在获取行

$stmt = $dbh->query('SELECT * 
      FROM `products` 
     WHERE `id` IN (' . $each . ')');

然后你就在同一个项目上循环

foreach ($new as $key => $val) {

如果要显示在sql中找到的项,则不应使用

foreach ($new as $key => $val) {

在while()循环中。while()已在为这些项返回的行上循环。这假设每个项目编号只有一个产品。
如果您希望为每个项目编号返回一个或多个“产品”,那么您应该在循环foreach($new)时执行sql,但这似乎不是代码顶部所做的。
经过一番反复,我们已经确定了问题:金额需要与项目编号挂钩。
您将从html中获取项目编号和数量作为数组。因此,您需要循环遍历这些项目,并将它们与您的数量相关联。

// where your qualities will live
$quantities = array() ; 

// loop through the array of items you received and match them up with their quantity 
foreach($item as $k=>$id) { 
    $quantities[$id] = $amount[$k] ; 
}

然后可以使用以下方法访问while循环中的数量:

$row['quantity'] = $quantities[$row['id']] ;

相关问题