在 PHP 中使用 foreach 和 while 一起生成 table

using foreach and while together in PHP to generate table

我已经在下面做了很多次与此 table 类似的事情,我在其中使用 while 语句来填充 <td> 部分table,但我以前从未这样做过 <td> 的一部分填充了 foreach 语句,这让我感到困惑。

在这个例子中,我创建了一个 table,然后根据我数据库中 table 的数量,用供应商列表填充第一列。 (每个供应商都有自己的 table)。

$supplierList = array();
$showTable = "SHOW TABLES from dbOne";
$getSuppliers = mysqli_query($con, $showTable);
while ($row = mysqli_fetch_row($getSuppliers)) {
    $supplierList[] = $row; 
    }
$supplierList = array_reduce($supplierList, 'array_merge', array());

现在我的数组包含我所有供应商的列表,我用它在我的 table.

中生成 <td>s
<table>
  <thead>
  <th style="text-align: center;">Supplier</th>
  <th style="text-align: center;">Earliest line</th>
  <th style="text-align: center;">Latest line</th>
  <th style="text-align: center;"># of total lines</th>


  </thead>
  <?php
  foreach ($supplierList as $subList) {
    $supplierName        = $subList;          

    $earlyExp            = "SELECT date FROM $subList ORDER BY date DESC LIMIT 1" ;
    $earlyExpQuery       = mysqli_query($con, $earlyExp);     
    $lateExp             = "SELECT date FROM $subList ORDER BY date ASC LIMIT 1" ;
    $lateExpQuery        = mysqli_query($con, $lateExp);
    $countLines          = "SELECT * from $subList";
    $countLinesQuery     = mysqli_query($con, $countLines);    
    $countLinesCount     = mysqli_num_rows($countLinesQuery);

    while ($row = mysqli_fetch_array($earlyExpQuery)) {
    $earlyExpDate    = $row['date'];

  ?>  
  <tbody>
  <td><img src = "/img/suppliers/<?= $supplierName ?>.png"></td>  
  <td style="text-align: center;"><?= $earlyExpDate ?></td>
  <td style="text-align: center;"><?= $lateExpDate ?></td>
  <td style="text-align: center;"><?= $countLinesCount ?></td>

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

table 本身构建正确,并在唯一的行中显示每个供应商。我无法弄清楚如何使用基于 foreach 语句中唯一供应商的信息填充该行的其他部分。

好的,我解决了这个问题。如果它对其他人有帮助,我是这样做的:

此代码与我上面的 post 在同一位置 - 因此在 header 和 table 的 body 之间。我不需要使用任何 <tr>.

<?php
  foreach ($supplierList as $subList) {
    $supplierName        = $subList;          

    $earlyExp            = "SELECT * FROM $subList where dateOne != '' UNION SELECT * from $subList where dateTwo != '' ORDER BY dateTwo, dateOne ASC LIMIT 1" ;
    $earlyExpQuery       = mysqli_query($con, $earlyExp);             
    $lateExp             = "SELECT * FROM $subList where dateOne != '' UNION SELECT * from $subList where dateTwo != '' ORDER BY dateTwo, dateOne DESC LIMIT 1" ;
    $lateExpQuery        = mysqli_query($con, $lateExp);
    $countLines          = "SELECT * from $subList";
    $countLinesQuery     = mysqli_query($con, $countLines);    
    $countLinesCount     = mysqli_num_rows($countLinesQuery);

    while ($row = mysqli_fetch_array($earlyExpQuery)) {
    $earlyExpDate    = $row['dateTwo'] ? $row['dateTwo'] : $row['dateOne'];
    }    
    while ($row = mysqli_fetch_array($lateExpQuery)) {
    $lateExpDate    = $row['dateTwo'] ? $row['dateTwo'] : $row['dateOne'];

  ?>  

他们的关键是我必须关闭每个单独的 while 语句,除了最后一个 - 在我关闭 </tbody> 标签之后但在 </table>,像这样:

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