2012-09-05 49 views
1

我有一个表将显示数据库中的数据。这些数据是dynamic。我想在每一行显示4。但是,最后一行的问题。如果最后一行有1个TD,我想要这个td的colspan为4,所以我可以在中间显示数据。动态colspan

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> 

感谢的提前。

+0

而如果有7条记录你想要显示什么..? –

+0

@AshwiniAgarwal 3 TDS每个td的宽度为33% – Othman

+0

好吧,考虑到你最后的评论,试试我的第二个例子(在最后一列中放置一个新表格 - 这是最简单的方法) – ronalchn

回答

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> 
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>'; 
    } 
}