【问题标题】:Build a complicated table with while/foreach使用 while/foreach 构建一个复杂的表
【发布时间】:2011-11-11 18:15:41
【问题描述】:

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

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

有没有办法以我想要的方式动态构建此表?还是我应该重新考虑我的策略?

【问题讨论】:

  • 我认为您需要计算每个 ID 出现的频率,以便在每个 first-ID-table-cell 上添加带有该数字的rowspan。然后您可以添加一个条件来检查当前 ID 是否与上次使用的 ID 不同。
  • 我认为stackoverflow.com/questions/6802346/… 是你要找的东西

标签: php loops foreach while-loop html-table


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是一种从您提供的代码中实现的方法

    <?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 为 1 且最后一个 ID 为 3 时才有效。那将是上升的。
    • 做到了!伙计,你们摇滚。感谢您的即时帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2019-08-03
    • 1970-01-01
    • 2020-07-16
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多