2012-09-05 75 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>'; 
    } 
}