1

我有一个表将显示来自数据库的数据。这些数据计数为dynamic。我想在每行显示 4 个。但是,最后一行的问题。我想如果最后一行有 1 个 TD,该函数将给这个 td a colspan4,所以我可以在中间显示数据。

NUMBER OF DATA IS 5

###############################################
#           TABLE HEADER(colspan=4)           #
###############################################
||  TD1   ||  TD2  ||   TD3   ||    TD4     ||
||  TD5   ||  

I NEED THIS 
###############################################
#           TABLE HEADER(colspan=4)           #
###############################################
||  TD1   ||  TD2  ||   TD3   ||    TD4     ||
||                  TD5                     ||  

and if there are 6 TDS to show it like this.

###############################################
#           TABLE HEADER(colspan=4)           #
###############################################
||  TD1   ||  TD2  ||   TD3   ||    TD4     ||
||       TD5       ||          TD6          ||  

我的 PHP 代码 + HTML

<table>
    <tr>
        <th colspan="4">TABLE HEADER</th>
    </tr>
    <tr>
        <? $counter = 0;
                foreach($data as $d)
                {
                    if($counter % 4 == 0)
                    {
                        echo '</tr><tr>';
                    }
                    echo $d['name'];
                    $counter++
                }
        ?>
    </tr>
</table>

提前致谢。

4

2 回答 2

1

这里有一些让你开始的东西。它可能不是最优雅的,但它会做。

<tr>
    <? $counter = 0;
       $lastrow = floor($count($data)/4)*4;
       $numinlastrow = $count($data)%4;
            foreach($data as $d)
            {
                if($counter % 4 == 0)
                {
                    echo '</tr><tr>';
                }
                $colspan = 1;
                if ($counter >= $lastrow) {
                  if ($numinlastrow == 1) $colspan = 4;
                  if ($numinlastrow == 2) $colspan = 2;
                  if ($numinlastrow == 3) ; // ??
                }
                echo "<td colspan='".$colspan."'>";
                //... contents of table cell here
                echo "</td>";
                $counter++
            }
    ?>
</tr>

如果有 3 个表格单元格,则使用上述方法实际上是不可能的,因为colspan只能跨越整个表格列(没有分数)。

因此,取而代之的是,将表格放在跨越整行的表格单元格中......

<tr>
    <? $counter = 0;
       $lastrow = floor($count($data)/4)*4;
       $numinlastrow = $count($data)%4;
            foreach($data as $d)
            {
                if($counter % 4 == 0)
                {
                  if ($counter >= $lastrow) {
                    echo '</tr><tr><td colspan="4"><table><tr>';
                  }
                  else echo '</tr><tr>';
                }

                echo "<td>";
                //... contents of table cell here
                echo "</td>";
                $counter++
            }
            if ($numinlastrow != 0) echo '</tr></table></td>'
    ?>
</tr>
于 2012-09-05T09:21:17.863 回答
0

我会通过以下方式(大约)这样做——虽然这可能看起来有点傻,但我现在想不出更好的方法:

$num_of_rows = mysql_num_rows($result);
for ($i = 0; $i < ($num_of_rows / 4); $i++)
{
   for ($j = 0; $j < 4; $j++)
   {
      $row = mysql_fetch_assoc($result);
      echo $row['name'];
   }
   echo '</tr><tr>';
}
if (mysql_num_rows($result) == 3)
{
   mysql_fetch_assoc($result);
   echo '<td colspan="2">'.$row['name'].'</td>';
   mysql_fetch_assoc($result);
   echo '<td>'.$row['name'].'</td>';
   mysql_fetch_assoc($result);
   echo '<td>'.$row['name'].'</td>';
}
else
{
   while($row = mysql_fetch_assoc($result))
   {
      echo '<td colspan="'.(4 / mysql_num_rows($result)).'">'.$row['name'].'</td>';
   }
}
于 2012-09-05T09:25:24.077 回答