2011-09-07 75 views
2

我试图从数组中创建结果表。我目前输出的结果如下:使用while/foreach构建复杂表格

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值。我想要做的是在我的当前循环内部建立一个不会显示重复ID的循环。事情是这样的:

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++; 
} 
?> 

有没有在我想要的方式动态地建立这个表格的方法吗?还是应该重新思考我的策略?

+2

我认为你需要统计每个ID的发生频率,以便在每个first-ID-table-cell上添加一个带有这个数字的'rowspan'。然后,您可以添加一个条件来检查当前ID是否与上次使用的ID不同。 – feeela

+1

我认为http://stackoverflow.com/questions/6802346/auto-detect-number-of-same-entry-and-do-a-rowspan-according-to-the-number是你在找什么 – fvu

回答

1

下面的方式来从代码做到这一点,你所提供

<?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是有序的。

+0

是的,这些ID是按顺序排列的,降序 – f8xmulder

+0

该代码仅在第一个ID是1且最后一个是3的情况下工作。这将是上升的。 –

+0

完成了!男人,你们摇滚。感谢您的即时帮助! – f8xmulder

2

假设ID是按顺序排序的,将ID存储在一个单独的变量中,并检查它是否发生了变化。如果有,打印ID;如果没有,则打印一个&nbsp;或类似的值。