2013-08-19 61 views
3

何我可以修改我的列,以便根據行中的項目數量添加colspan(如果需要)?根據項目數量修改列間距

方案:

說我有5項,我需要與列跨度一個行/ 4列,下一行1列= 「4」

說我有6項,我需要1行/ 4列,下一行,2列與列跨度= 「2」

說我有7個項目,我需要1行/ 4列,下一行,2列不再合併單元格,+ 1列跨度= 「2」

這裏是我現有的代碼:

 echo '<table width="100%" cellpadding="10" cellspacing="5">' . PHP_EOL; 

     $colSpan = 4; 
     $rows = 0; 
     for($i = 0; $i < $tmpCt; $i++) { 
      // At column 0 you create a new row <tr> 
      if($i % $colSpan == 0) { 
       $rows++; 
       echo "<tr>\n"; 
      } 
      // if only 1 item in the row, need to add colspan="4", 2 items colspan="2" for 2 <td>'s, 3 items 1 @ colspan="2" + 2 <td>'s 
      echo '<td width="25%" align="center" valign="middle">' . $tmpRet[$i]['sponName'] . '</td>' . PHP_EOL; 

      // At column 3 you end the row </tr> 
      echo $i % $colSpan == 3 ? "</tr>\n" : ""; 
     } 
     // Say you have 5 columns, you need to create 3 empty <td> to validate your table! 
     for($j = $i; $j < ($colSpan * $rows); $j++) { 
      echo "<td>&nbsp;</td>\n"; 
     } 
     // Add the final <tr> 
     if(($colSpan * $rows) > $i) { 
      echo "</tr>\n"; 
     } 


     echo '</table>'; 
+0

你能製作一個圖像,以便我們可以更好地瞭解你嗎? – Zaffy

+0

我已經創建了一個廣義函數,它將採用數組和列數作爲輸入,並在問題中執行您的要求。在我的回答中查看下面的信息 – rakeshjain

+0

對不起。是的,我做到了,他得到了答案的接受,你得到了賞金。 – Kevin

回答

4

那麼,算術是有用的!
您需要的是在每個級別使用模運算。

這裏是我的解決方案:

$tmpRet = array(
    array(1), 
    array(1, 2, 3), 
    array(1, 2, 3, 4, 5, 6, 7), 
    array(1, 2, 3, 4, 5), 
    array(1, 2), 
    array(1, 2, 3, 4, 5, 6), 
    array(), 
    array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), 
    array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
); 
$lencol = count($tmpRet); 

echo '<table border="1" width="800px" cellpadding="10" cellspacing="5">'.PHP_EOL; 
$colspan = 4; 

for($i = 0; $i < $lencol; $i++) { 
    $bg = 'style="background-color: #'.rand(100, 999).'"'; 
    $row = $tmpRet[$i]; 
    $lc = count($row); 
    $offset = 0; 

    if ($lc>$colspan) { 
    $ct = floor($lc/$colspan); 
    $offset = $ct * $colspan; 
     $m = 0; 
    for ($k = 0; $k<$ct; $k++) { 
     echo '<tr '.$bg.' >'; 
     for ($l = 0; $l<$colspan; $l++) { 
     echo '<td>'.$row[$m].'</td>'; 
     $m++; 
     } 
     echo '<tr>'; 
    } 
    } 
    $mod = $lc % $colspan; 
    switch ($mod) { 
    case 1: 
     echo '<tr '.$bg.' ><td colspan="4">'.$row[$offset].'</td></tr>'; 
    break; 
    case 2: 
     echo '<tr '.$bg.' ><td colspan="2">'.$row[$offset].'</td><td colspan="2">'.$row[$offset+1].'</td></tr>'; 
    break; 
    case 3: 
     echo '<tr '.$bg.' ><td>'.$row[$offset].'</td><td>'.$row[$offset+1].'</td><td colspan="2">'.$row[$offset+2].'</td></tr>'; 
    break; 
    } 
} 

echo '</table>'; 

這是什麼樣子:

example

希望這有助於

編輯:這僅適用於$colspan=4,如果你需要更動態的東西,可以考慮用s替換switch語句還有別的...也許是嵌套循環...

+0

你不得不原諒我的'#dumbness',我該如何將這個應用到我的代碼中? – Kevin

+0

我不知道你的代碼和數據是如何組織的,但是根據你分享的代碼行以及你問這個問題的方式,我推斷你的數據在'$ tmpRet'中,這是一個包含其他數組的數組。這就是爲什麼我創建了一個填充數字的測試數組。否則,你的數據是如何組織的?我需要一個例子,如果這不是你正在尋找的結果 – yafrani

+0

thanx,它是來自'mysql_fetch_array''MYSQL_ASSOC'的結果集 – Kevin

1

我已經創建了一個廣義函數,它將採用數組和列數作爲輸入,並在問題中執行您的要求。我從我身邊測試過它。請測試它,讓我知道,如果你發現任何遺蹟

<?php 
function test($arr,$colspan) { 
    $count = count($arr); 


    $extra_elements = $count % $colspan; 
    $num_of_rows=($count-$extra_elements)/$colspan; 

    //print $extra_elements . " hhhhh" . $num_of_rows; 
    $current_count = 0; 
    print "<table>"; 
    for($i=0;$i<$num_of_rows;$i++) { 
     print "<tr>"; 
     for($j=0;$j<$colspan;$j++) { 
      $bg = 'style="background-color: #'.rand(100, 999).'"'; 
      print "<td $bg>" . $arr[$current_count] . "</td>"; 
      $current_count++; 
     } 
     print "</tr>"; 
    } 

    if($extra_elements>0) { 
     print "<tr>"; 
     $divisor = $colspan%$extra_elements; 
     if($divisor==0 && $extra_elements!=1) { 
       $last_row_span = $colspan/$extra_elements; 
       while($current_count<$count) { 
        $bg = 'style="background-color: #'.rand(100, 999).'"'; 
        print "<td colspan='$last_row_span' $bg>" . $arr[$current_count] . "</td>"; 
        $current_count++; 
       } 
     } 
     else { 
       $j=0; 
       while($current_count<$count-1) { 
        $bg = 'style="background-color: #'.rand(100, 999).'"'; 
        print "<td $bg>" . $arr[$current_count] . "</td>"; 
        $current_count++; 
        $j++; 
       } 
       $last_row_span = $colspan-$j; 
       $bg = 'style="background-color: #'.rand(100, 999).'"'; 
       print "<td colspan='$last_row_span' $bg>" . $arr[$current_count] . "</td>"; 
     }  
     print "</tr>"; 
    } 

    print "</table>"; 
} 
$arr=array(0,1); 
test($arr,4); 
?>