1 个表中的 2 个 foreach 无法正常工作

问题描述

我尝试在一张表中循环 2 个查询。两个查询都有 10 条记录。所以我把我的第一个 foreach(或循环)放在 TR 标签之前..

这是我要创建的表的示例:

.table,th,td { border: 1px solid}
<table>
        <thead>
          <tr>
            <th colspan=2><center>Out Of Stock</center></th>
            <th colspan=2><center>Sales By Qty</center></th>
          </tr>
        </thead>
        <tbody>      
            <tr>
             <td>Data 1 from 1st Query</td>
             <td>Data 1 from 1st Query</td>
             <td>Data 1 from 2nd Query</td>
             <td>Data 1 from 2nd Query</td>
            </tr>
            <tr>
             <td>Data 2 from 1st Query</td>
             <td>Data 2 from 1st Query</td>
             <td>Data 2 from 2nd Query</td>
             <td>Data 2 from 2nd Query</td>
            </tr>
             <tr>
             <td>Data 3 from 1st Query</td>
             <td>Data 3 from 1st Query</td>
             <td>Data 3 from 2nd Query</td>
             <td>Data 3 from 2nd Query</td>
            </tr>
            <tr>
             <td>Data 4 from 1st Query</td>
             <td>Data 4 from 1st Query</td>
             <td>Data 4 from 2nd Query</td>
             <td>Data 4 from 2nd Query</td>
            </tr>
        </tbody>
      </table>

我不知道如何使用数据库中的数据制作这样的表格..

所以我尝试将第一个 Foreach 放在 TR 标签中,并在 /TR tg 之后关闭它。所以我们可以看到 TR /TR 中有 4 个 TD /TD 。所以我把第二个 foreach 放在 4 TD /TD 之间。

就像这样:

        <table>
        <thead>
          <tr>
            <th colspan=2><center>Out Of Stock</center></th>
            <th colspan=2><center>Sales By Qty</center></th>
          </tr>
        </thead>
        <tbody>   
          <?PHP foreach($First_Data as $row){?>   
            <tr>
             <td>Data 1 from 1st Query</td>
             <td>Data 1 from 1st Query</td>
         <?PHP foreach($Second_data as $row){?>
             <td>Data 1 from 2nd Query</td>
             <td>Data 1 from 2nd Query</td>
         <?PHP }?>
            </tr>
          <?PHP }?>
        </tbody>
        </table>

结果并不完美,我猜我的 foreach 出现在错误的位置。

在这里你可以看到我尝试的结果:

<!DOCTYPE html>
<html>
<head>
<style>
#customers {
  font-family: Arial,Helvetica,sans-serif;
  border-collapse: collapse;
  width: 100%;
}

#customers td,#customers th {
  border: 1px solid #ddd;
  padding: 5px;
}

#customers tr:nth-child(even){background-color: #f2f2f2;}

#customers tr:hover {background-color: #ddd;}

#customers th {
  padding-top: 12px;
  padding-bottom: 12px;
  text-align: left;
  background-color: orange;
  color: white;
}
</style>
</head>
<body>

      <table id="customers" >
        <thead>
          <tr>
            <th colspan=2><center>Out Of Stock</center></th>
            <th colspan=2><center>Sales By Qty</center></th>
          </tr>
        </thead>
        <tbody>
        <tr>
        <td>CIMORY YD STRAW 70 ML BANDED 4</td>
        <td>89%</td>
        <tr>
        <td>CIMORY YD STRAWBERY MANGGO LF</td>
        <td>88%</td>
        <tr>
        <td>CIMORY YD BLUEBerry 250 ML</td>
        <td>85%</td>
        <tr>
        <td>CIMORY YD MIXED BERRIES 250 ML</td>
        <td>85%</td>
        <tr>
        <td>CIMORY YD BLUEBerry 70 ML BND4</td>
        <td>84%</td>
        <tr>
        <td>CIMORY YD MIXED 70 ML BANDED 4</td>
        <td>84%</td>
        <tr>
        <td>YOLITE C+100 ORANGE </td>
        <td>84%</td>
        <tr>
        <td>YOLITE C+100 ORIGINAL</td>
        <td>84%</td>
        <tr>
        <td>CIMORY YD BANANA LF</td>
        <td>83%</td>
        <tr style="background-color: yellow;">
        <td>CIMORY YD PLAIN 250 ML</td>
        <td>82%</td>
        <td>YD-004</td>
        <td>390</td>
        </tr>
        <td>YD-005</td>
        <td>363</td>
        </tr>
        <td>YD-006</td>
        <td>248</td>
        </tr>
        <td>YD-002</td>
        <td>240</td>
        </tr>
        <td>YD-008</td>
        <td>153</td>
        </tr>
        <td>YD-069</td>
        <td>137</td>
        </tr>
        <td>YD-072</td>
          <td>132</td>
        </tr>
        <td>YD-015</td>
        <td>111</td>
        </tr>
        <td>YD-010</td>
        <td>111</td>
        </tr>
        <td>YD-001</td>
        <td>72</td>
        </tr>
        </tbody>
        </table>

</body>
</html>

只有一行(黄色背景)是正确的,其他不正确。我不知道为什么。也许我的 foreach 不正确,或者我把它放在了错误的地方。

这里是我想要实现但我不知道如何实现的:

<html>
<head>
<style>
#customers {
  font-family: Arial,sans-serif;
  border-collapse: collapse;
  width: 100%;
}
#customers td,#customers th {
  border: 1px solid #ddd;
  padding: 5px;
}
#customers tr:nth-child(even){background-color: #f2f2f2;}
#customers tr:hover {background-color: #ddd;}
#customers th {
  padding-top: 12px;
  padding-bottom: 12px;
  text-align: left;
  background-color: orange;
  color: white;
}
</style>
</head>
<body>
     <table id="customers" style="width: 80%" >
        <thead>
          <tr>
            <th colspan=2><center>Out Of Stock</center></th>
            <th colspan=2><center>Sales By Qty</center></th>
          </tr>
        </thead>
        <tbody>
        <tr>
        <td>CIMORY YD STRAW 70 ML BANDED 4</td>
        <td>89%</td>
        <td>YD-005</td>
        <td>363</td>
        </tr>
        <tr>
        <td>CIMORY YD STRAWBERY MANGGO LF</td>
        <td>88%</td>
        <td>YD-006</td>
        <td>248</td>
        </tr>
        <tr>
        <td>CIMORY YD BLUEBerry 250 ML</td>
        <td>85%</td>
        <td>YD-002</td>
        <td>240</td>
        </tr>
        <tr>
        <td>CIMORY YD MIXED BERRIES 250 ML</td>
        <td>85%</td>
        <td>YD-008</td>
        <td>153</td>
        </tr>
        <tr>
        <td>CIMORY YD BLUEBerry 70 ML BND4</td>
        <td>84%</td>
        <td>YD-069</td>
        <td>137</td>
        </tr>
        <tr>
        <td>CIMORY YD MIXED 70 ML BANDED 4</td>
        <td>84%</td>
        <td>YD-072</td>
        <td>132</td>
        </tr>
        <tr>
        <td>YOLITE C+100 ORANGE </td>
        <td>84%</td>
        <td>YD-015</td>
        <td>111</td>
        </tr>
        <tr>
        <td>YOLITE C+100 ORIGINAL</td>
        <td>84%</td>
        <td>YD-010</td>
        <td>111</td>
        </tr>
        <tr>
        <td>CIMORY YD BANANA LF</td>
        <td>83%</td>
        <td>YD-001</td>
        <td>72</td>
        <tr>
        <td>CIMORY YD PLAIN 250 ML</td>
        <td>82%</td>
        <td>YD-004</td>
        <td>390</td>
        </tr>
        </tbody>
        </table>
</body>
</html>

谁能告诉我怎么做,我会很感激.. 对不起,如果我的英语不是很好,因为它不是我的母语

解决方法

是的,您的逻辑遗漏了一些东西,因为第二个循环在第一个循环中运行,所以您在同一个 TR 中创建了很多 TD。

为了实现你想要的,我建议合并两个数组,然后循环一个数组。

<?php
$merged_array = [];
foreach($First_Data as $key => $row) {
    $merged_array[$key] = ['first' => $row];
}

foreach($Second_data as $key => $row) {
    $merged_array[$key]['second'] = $row;
}

/// HTML
?>
<tbody>   
    <?php foreach($merged_array as $key => $data){?>   
        <tr>
            <td><?=$data['first']['yourcolumnname'] ?></td>
            <td><?=$data['first']['yourcolumnname2'] ?></td>
            <td><?=$data['second']['yourcolumnname'] ?></td>
            <td><?=$data['second']['yourcolumnname2'] ?></td>
        </tr>
    <?php }?>
</tbody>

或者,如果您 100% 确定两个数组之间的键相同,您还可以执行以下更短的版本,而无需合并两个数组:

<tbody>   
    <?php foreach($First_Data as $key => $row){?>   
        <tr>
            <td><?=$row['yourcolumnname'] ?></td>
            <td><?=$row['yourcolumnname2'] ?></td>
            <td><?=$Second_data[$key]['yourcolumnname'] ?></td>
            <td><?=$Second_data[$key]['yourcolumnname2'] ?></td>
        </tr>
    <?php }?>
</tbody>