Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将SQL组名称作为表头行_Php_Html - Fatal编程技术网

使用PHP将SQL组名称作为表头行

使用PHP将SQL组名称作为表头行,php,html,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><t

我尝试使用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>
SELECT name,hour FROM checkin_tbl ORDER BY name ASC;
<?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 ?>
基本上,我想要输出的内容如下:

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>
SELECT name,hour FROM checkin_tbl ORDER BY name ASC;
<?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解决方案可以是

$name_holder = null;
for($i=0;$i<count($data);$i++) {
    if($name_holder != $data[$i]->name){
        $name_holder = $data[$i]->name;
        echo "<tr><td colspan='2'>Name: " . $name_holder . "</td></tr>"
    }

    echo "<tr>";
    echo "<td align='left'>".$data[$i]->hour."</td>";
    echo "<td align='left'>edit</td>";
    echo "</tr>";
}
分组:

SELECT CustomerId, ShipperId FROM [Orders] WHERE ShipperId = 1 GROUP BY ShipperId

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

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

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>
SELECT name,hour FROM checkin_tbl ORDER BY name ASC;
<?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 ?>
我没有提供下面的数据库代码,因为不清楚您使用的是什么数据库(例如MySQL)或您使用的是什么接口(例如PDO)。因此,我使用数组模拟了一个数据源——我相信您可以使用
fetchAll()
foreach()
和一行
fetch()
来交换它

因此,请尝试以下方法:

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>
SELECT name,hour FROM checkin_tbl ORDER BY name ASC;
<?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。

请包含实际SQL的代码。因此,我们可以帮助您从获取数据的那一刻起,以您希望的方式呈现数据。您还可以添加查询的PHP实现吗?您是否使用pdo、ORM等。。。在php中是一种关键的替换bycode@mvbrakel我正在使用codeigniter活动记录进行查询$数据是一组结果。假设原始数据的第一个片段在数组中$data[$i]->马克和保罗的名字。@halfer你能给我举个例子吗?谢谢。我完全同意你以上的评论。我决不想与你的答案“竞争”。我甚至说这是一个更好的设置,不是吗?我现在甚至删除了我的答案,因为你的答案现在已经完整地回答了这个问题。很公平,@mvbrakel-没有必要删除你的答案!在这里和一般情况下,看到许多解决同一问题的方法可能对OP有用。(我将删除上面的几条评论以进行整理-再次感谢您的反馈)。没问题@BaconJuice。我也修复了一些无效的HTML,请看我刚才的编辑。