【问题标题】:Dynamic table with PHP使用 PHP 的动态表
【发布时间】:2017-07-05 00:55:27
【问题描述】:

我正在尝试使用 PHP 创建一个动态表。行数将基于从 mysql 中提取的记录数,但我只想要一行 4 行。这是我现在所拥有的

$sql = "SELECT t.tankid,t.TankName,tc.paramid,tc.active,pr.paramname,pr.minvalue,pr.maxvalue,pr.incvalue,pr.value from mr_tanks t inner join mr_testconfig tc ON tc.tankid = t.tankid inner join mr_parameters pr ON tc.paramid = pr.parameterid where t.tankid = :tankid and t.active = 1 and tc.active = 1";
$records1 = $con->prepare($sql);
$records1->bindParam(':tankid', $_GET['tankid']);
$records1->execute();
$headers = $col = "";
while ($row1 = $records1->fetch(PDO::FETCH_ASSOC)) {
    $headers .= "<th> {$row1['paramname']} </th>";
    $col .= "<td> {$row1['minvalue']} </td>";
}
echo "<table><tr>$headers</tr><tr>$col</tr></table>";
?>  

我得到的是所有行都是这样排列的:

标题 1 标题 2 标题 3 标题 4 标题 5 标题 6 标题 7 标题 8
数据 1 数据 2 数据 3 数据 4 数据 5 数据 6 数据 7 数据 8

我希望它是

标题 1 标题 2 标题 3 标题 4
数据 1 数据 2 数据 3 数据 4
标题 5 标题 6 标题 7 标题 8
数据 5 数据 6 数据 7 数据 8 孔

    _____________________________________________________________
    |  TestName 1  |  TestName 2  |  TestName 3  |  TestName 4  |
    |___________________________________________________________|
    |  ResultTest1 |  ResultTest2 | ResultTest3   | ResultTest 4|
    _____________________________________________________________
    |  TestName 5  |  TestName 6  |  TestName 7   |  TestName 8 |
    |___________________________________________________________|
    |  ResultTest5 |  ResultTest6 | ResultTest7  | ResultTest 8 |        

<table>
    <tr>
        <th> TestName 1</th>
        <th> TestName 2</th>
        <th> TestName 3</th>
        <th> TestName 4</th>
    </tr>
    <tr>
        <td> ResultTest 1</td>
        <td> ResultTest 2</td>
        <td> ResultTest 3</td>
        <td> ResultTest 4</td>
    </tr>
    <tr>
        <th> TestName 5</th>
        <th> TestName 6</th>
        <th> TestName 7</th>
        <th> TestName 8</th>
    </tr>
    <tr>
        <td> ResultTest 5</td>
        <td> ResultTest 6</td>
        <td> ResultTest 7</td>
        <td> ResultTest 8</td>
    </tr>
</table>        

【问题讨论】:

  • 意思是两张表吧?
  • 你需要两张桌子?
  • 这是 1 张桌子。在 header 中是测试的名称,在 data 中将是结果。
  • 但根据您的预期结果,您似乎想在每四个名称之后拆分
  • 我更新了一个问题,我在表格中划了一条,希望它能让您更好地了解我想要实现的目标。测试的数量可以从 1 到 16 不等。我只想要 4 次测试,结果排成一行

标签: php mysql dynamic html-table


【解决方案1】:

您可以将行分块成二维数组,然后循环遍历它们,其中每个块将为您提供一个单独的表,每个表有 4 行。

如果最后一个块的行数少于 4 行,您可以决定保留少于 4 列的表格,或者如果您仍需要它为 4 列,则添加具有空参数名/最小值的填充行。

$results = array();
while ($row1 = $records1->fetch(PDO::FETCH_ASSOC)) {
  $results[] = $row1;
}

$results = array_chunk($results, 4);
foreach($results as $chunk) {
  $headers = "";
  $col = "";
  foreach($chunk as $row) {
    $headers .= "<th> {$row)['paramname']} </th>";
    $col .= "<td> {$row)['minvalue']} </td>";
  }
  echo "<table><tr>$headers</tr><tr>$col</tr></table>";
} 

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多