【问题标题】:Set proper conditional statement in WHILE LOOP在 WHILE LOOP 中设置适当的条件语句
【发布时间】:2013-09-15 14:20:15
【问题描述】:

提交 mysqli_query 以从购物车数据库中选择未完成/未完成的订单后,结果将通过标准 WHILE LOOP 输出到屏幕。

while($row = mysqli_fetch_array($oresult)) { include('orders-open.php');}

orders-open.php 只是 TABLE 的内部部分:

 <tr style="color:#FFF;">
    <td><?php echo $row['Buyer']; ?></td>
    <td><?php echo $row['Cart_Date']; ?></td>
    <td><?php echo $row['Item_Number']; ?></td>
    <td><?php echo $row['Item_Title']; ?></td>
    <td><?php echo $row['Item_FPrice']; ?></td>
    <td><?php echo $row['Item_Qty']; ?></td>
    </tr>

所以这是我的问题,我想在 $row['Buyer'] 中的值发生变化的记录之间应用一个简单的 HTML“&lt;HR&gt;”标签,例如:强>

约翰·多伊 9/11/13 123456 项目 1 $5.99 5
John Doe 2013 年 9 月 11 日 123654 项目 2 8.99 美元 3
John Doe 2013 年 9 月 9 日 321456 项目 3 4.99 美元 2

(HR - 这里的水平规则标签)

Mike Doe 2013 年 9 月 7 日 123555 项目 1 9.99 美元 2
Mike Doe 2013 年 9 月 7 日 123777 项目 2 2.99 美元 6

在 WHILE LOOP 中编写条件语句以将 $row[Buyer'] 结果与之前的 $row['Buyer'] 结果进行比较的最佳方法是什么?

【问题讨论】:

  • 只需在第一个循环中保存$row['Buyer'] 值,然后将其与下一个值进行比较(值更改时刷新)。

标签: php while-loop conditional-statements


【解决方案1】:
$first_run = TRUE;
$previous_buyer = NULL;
while($row = mysqli_fetch_array($oresult)) { 
      if($first_run) {
         $first_run = FALSE;
         $previous_buyer = $row['Buyer'];
      }
   include('orders-open.php');
}

然后在你的包含文件中:

<?php if($previous_buyer != $row['Buyer']) { 
    echo '<HR width="100%">'; 
    $previous_buyer = $row['Buyer'];
} ?>
<tr style="color:#FFF;">
    <td><?php echo $row['Buyer']; ?></td>
    <td><?php echo $row['Cart_Date']; ?></td>
    <td><?php echo $row['Item_Number']; ?></td>
    <td><?php echo $row['Item_Title']; ?></td>
    <td><?php echo $row['Item_FPrice']; ?></td>
    <td><?php echo $row['Item_Qty']; ?></td>
</tr>

【讨论】:

  • 当你在一张桌子里面之后,我突然想到了。我不确定
    在表格行之间的渲染效果如何。您可能想要替换 echo '
    ';与
  • 谢谢,这确实有效,但 HR 标签没有像你提到的那样呈现(实际上它确实......但它呈现在表格顶部而不是记录之间) - 在你提到的更改之后评论一切都正确呈现,谢谢。
【解决方案2】:
$prev_buyer = '';
while($row = mysqli_fetch_array($oresult))
{
  if($prev_buyer !== $row['Buyer'])
  {
    //Do Something
  }

  include('orders-open.php');

  $prev_buyer = $row['Buyer']
}

【讨论】:

    【解决方案3】:

    就像 Elon 上面所说的那样 - 改变这个:

    while($row = mysqli_fetch_array($oresult)) { include('orders-open.php');}

    $old_buyer = null;
    while($row = mysqli_fetch_array($oresult)) {
        if ($row['Buyer'] != $old_buyer) {
            echo '<hr>';
        }
        $old_buyer = $row['Buyer'];
        include('orders-open.php');
    }
    

    【讨论】:

    • $old_buyer 变量声明需要在 if 块内进行才能正常工作。
    • $old_buyer 将在每次迭代中被分配,而不是仅仅以防万一它不同但它仍然会以这种方式工作。
    • 嗯,好的,它会工作的。但如果变量没有不同,则无需更新变量。
    • 同意 :) 重构完美。
    • -1 此代码将在第一行显示一条水平线。
    【解决方案4】:

    你可以这样做:

    $buyer = null ;  //Cache buyer in a variable, because $row is reset in the loop.
    
    while($row = mysqli_fetch_array($oresult)) {
       include('orders-open.php');
       if ($buyer !== $row["Buyer"]){
         echo ($buyer !== null) ? "<hr/>" : "" ;
         $buyer = $row["Buyer"] ;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 2016-05-16
      • 2021-11-07
      • 2019-06-02
      • 2016-07-02
      相关资源
      最近更新 更多