Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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 使用while/foreach构建复杂的表_Php_Loops_Foreach_While Loop_Html Table - Fatal编程技术网

Php 使用while/foreach构建复杂的表

Php 使用while/foreach构建复杂的表,php,loops,foreach,while-loop,html-table,Php,Loops,Foreach,While Loop,Html Table,我正在尝试从数组构建一个结果表。我目前有如下结果输出: ID VALUE EXTRA -------------------------------------- | 1 | Value 1 | Extra 1 | |-----|---------------------|----------| | 1 | Value 2 | Extra 2 | |-----|----------------

我正在尝试从数组构建一个结果表。我目前有如下结果输出:

   ID       VALUE             EXTRA
 --------------------------------------
|  1  |     Value 1         | Extra 1  |
|-----|---------------------|----------|
|  1  |     Value 2         | Extra 2  |
|-----|---------------------|----------|
|  2  |     Value 3         | Some 1   |
|-----|---------------------|----------|
|  3  |     Value 4         | Some 2   |
|-----|---------------------|----------|
|  3  |     Value 5         | Nothing  |
 --------------------------------------  
   ID       VALUE             EXTRA
 --------------------------------------
|  1  |     Value 1         | Extra 1  |
|     |---------------------|----------|
|     |     Value 2         | Extra 2  |
|-----|---------------------|----------|
|  2  |     Value 3         | Some 1   |
|-----|---------------------|----------|
|  3  |     Value 4         | Some 2   |
|     |---------------------|----------|
|     |     Value 5         | Nothing  |
 --------------------------------------  
请注意重复的ID值。我想做的是在我的当前循环中构建一个不会显示重复ID的循环。大概是这样的:

   ID       VALUE             EXTRA
 --------------------------------------
|  1  |     Value 1         | Extra 1  |
|-----|---------------------|----------|
|  1  |     Value 2         | Extra 2  |
|-----|---------------------|----------|
|  2  |     Value 3         | Some 1   |
|-----|---------------------|----------|
|  3  |     Value 4         | Some 2   |
|-----|---------------------|----------|
|  3  |     Value 5         | Nothing  |
 --------------------------------------  
   ID       VALUE             EXTRA
 --------------------------------------
|  1  |     Value 1         | Extra 1  |
|     |---------------------|----------|
|     |     Value 2         | Extra 2  |
|-----|---------------------|----------|
|  2  |     Value 3         | Some 1   |
|-----|---------------------|----------|
|  3  |     Value 4         | Some 2   |
|     |---------------------|----------|
|     |     Value 5         | Nothing  |
 --------------------------------------  
以下是我当前的代码,简化版:

<?php
$i=0;
while ($i < $mynum) {

$f1=mysql_result($myresult,$i,"tableID");
$f2=mysql_result($myresult,$i,"values");       
$f3=mysql_result($myresult,$i,"extra");
?>
<tr>
 <td><?php echo $f1; ?></td>
 <td><?php echo $f2; ?></td>
 <td><?php echo $f3; ?></td>
</tr>       
<?php
$i++;
}
?>


有没有办法以我想要的方式动态构建这个表?或者我应该重新考虑我的策略吗?

假设ID是按顺序排序的,将ID存储在单独的变量中,并检查它是否已更改。如果有,打印ID;如果没有,请打印一个
或类似的值。

这里有一种方法可以根据您提供的代码执行此操作

<?php
    $i=0;

    $previousId = ''; // keeps track of the previous Id 
    while ($i < $mynum) {

    $html = '';

    $f1=mysql_result($myresult,$i,"tableID");
    $f2=mysql_result($myresult,$i,"values");       
    $f3=mysql_result($myresult,$i,"extra");
    $html .= '<tr>';
    if($previousId != $f1){ // fill the cell only if the new Id is different from the previous value
        $html .= '<td>'.$f1.'</td>';
    } else {
        $html .= '<td>&nbsp;</td>';
    }
            $previousId = $f1;
    $html .= '<td>'.$f2.'</td>';
    $html .= '<td>'.$f3.'</td>';
    $html .= '</tr>';

    $i++;
    }
            echo $html;
 ?>


但这是假设
$f1
已排序。

我认为您需要计算每个ID出现的频率,以便在每个第一个ID表单元格上添加一个带有该数字的
行span
。然后,您可以添加一个条件来检查当前ID是否与上次使用的ID不同。我想这就是您要查找的是,ID是按顺序排列的,在本例中,只有当第一个ID为1,最后一个ID为3时,该代码才起作用。那就是提升,成功了!伙计,你们太棒了。谢谢你的及时帮助!