php - 使用PHP将SQL组名称用作表标题行

标签 php html

我正在尝试使用如下形式的PHP输出动态表:

Paul     56
Paul     6
Paul     78
Paul     34
Paul     76
Mark     56
Mark     5
Mark     34
Mark     87
Mark     23
Mark     765


基本上我想输出的是这样的:

<table>
<tr colspan="2">Name: Paul</tr>
<tr><td>56</td><td>Edit</td></tr>
<tr><td>6</td><td>Edit</td></tr>
<tr><td>78</td><td>Edit</td></tr>
<tr><td>34</td><td>Edit</td></tr>
<tr><td>76><td>Edit</td></tr>

<tr colspan="2">Name: Mark</tr>
<tr><td>56</td><td>Edit</td></tr>
<tr><td>5</td><td>Edit</td></tr>
<tr><td>34</td><td>Edit</td></tr>
<tr><td>87</td><td>Edit</td></tr>
<tr><td>23/td><td>Edit</td></tr>
<tr><td>765/td><td>Edit</td></tr>
</table>


到目前为止,我的PHP代码如下:

<?php
$name_holder = null;
for($i=0;$i<count($data);$i++) {
    if($name_holder != $data[$i]->name){
        $name_holder = $data[$i]->name;
        //not sure what to do here??
    }

    echo "<tr>";
    echo "<td align='left'>".$data[$i]->name."</td>";
    echo "<td align='left'>".$data[$i]->hour."</td>";
    echo "</tr>";
}
?>


的SQL

SELECT name,hour FROM checkin_tbl GROUP BY name ORDER BY name ASC;

最佳答案

您无需在数据库级别对数据进行分组。可以这样做,但是对于每个组,您都需要另一个SELECT来读取相关数据,这将导致将过多的查询发送到数据库。

因此,我选择使用直接查询来读取数据,如下所示:

SELECT name,hour FROM checkin_tbl ORDER BY name ASC;


我尚未在下面提供数据库代码,因为目前尚不清楚您使用的是哪个数据库(例如MySQL)或您使用的是哪个接口(例如PDO)。因此,我已经使用数组模拟了数据源-我确定您可以将其替换为fetchAll()foreach()以及行fetch()

因此,尝试这样的事情:

<?php

// Data from your database
$rawData = [
    ['Paul', 56],
    ['Paul', 6],
    ['Mark', 56],
    ['Mark', 5],
];

// Let's reformat this
$out = [];
foreach ($rawData as $pair)
{
    $name = $pair[0];
    if (!isset($out[$name]))
    {
        $out[$name] = [];
    }

    // Pop the value on the list
    $out[$name][] = $pair[1];
}

// Use this to look at your structure
#print_r($out);

?>

<!-- Here's your rendering section -->

<?php foreach ($out as $name => $data): ?>
    <tr colspan="2"><td>Name: <?php echo htmlentities($name) ?></td></tr>

    <?php foreach ($data as $item): ?>
        <tr><td><?php echo htmlentities($item) ?></td><td>Edit</td></tr>
    <?php endforeach ?>
<?php endforeach ?>


我的策略是在模板外部尽可能地格式化数据-在我看来,您的代码和此处的另一个答案(在撰写本文时)过度混合了逻辑和布局,因此您需要将它们分开。

这就是为什么我在渲染部分切换到打开/关闭PHP标签的原因:这是带有PHP代码段的HTML,其中需要动态输出。如果这样做,您将在IDE中受益于标签匹配和语法着色。

我添加了htmlentities()来防止XSS。

关于php - 使用PHP将SQL组名称用作表标题行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58602327/

相关文章:

html - 为什么我的主要内容 div 没有扩展以适应其中的子 div?

javascript - 如何删除或更改弹出的自动消息

php - PHP 中带有关联数组的 UPDATE 语句返回 注意

php - MySQL查询结果之和

javascript - 通过 async 和 defer 属性提高页面速度

javascript - 展开/折叠将 div 向下推到页面下方的 div

php - IIS7 重写规则?

javascript - 使用 javascript 转义 php 字符,正确的语法引号

javascript - SPAN 标签对 TR 标签进行分组,但 SPAN 不是 TR 的父级

jquery - 如何将 Bootstrap Datepicker anchor 位置更改为居中?