2016-10-11 18 views
2

我有一個有趣的問題,好像它早就解決了但找不到任何東西。PHP:將數組堆疊在表中的多列上

我有一個簡單的數組,可變長度。

我需要把數組放在表中但只有X列寬。意思是,如果數組有25個值,而我只需要3列,則會有2列11和3列(其餘)的1列。

像這樣(每個數字代表表格單元格的值):

1 12 23 
2 13 24 
3 14 25 
4 15 
5 16 
6 17 
7 18 
8 19 
9 20 
10 21 
11 22 

我花了一整天下午這一點,似乎將是簡單的,但無論是我的比賽是今天休息,或者它比我想象的更難。

當然,沒有問題水平,容易,但垂直是需求,我永遠不知道數組的大小和列數可以變化。

感謝您的幫助!

+2

爲什麼不是2列10和第三個5? – sal

+1

我可以想象這有點棘手,只是因爲,只要左列的大小相等並且比最右列長,那將是一個有效的解決方案。也就是說,兩列10和5之一將符合要求,兩列12和1之一將適合,兩列9和7之一將適合... –

+0

所以是列數和一列的長度是一個函數的參數,應該「打印」它? –

回答

5

在你想要的最後一列有儘可能多的元素更多鈔票,以適應其他列(最有活力的情況下,對於這個問題)的情況下,這將是一個解決方案:

<?php 

$numberOfColumns = 3; 
$myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]; 

$arrayLength = count($myArray); // 25 
$columnLength = ceil($arrayLength/$numberOfColumns); // 9 

for ($i = 0; $i < $columnLength; $i++) { 

    for ($j = 0; $j < $numberOfColumns; $j++) { 

    $arrayIndex = $j * $columnLength + $i; 
    if ($arrayIndex < $arrayLength) { 
     echo $myArray[$arrayIndex] . " "; 
    } 

    } 

    echo '<br>'; 
} 

這是輸出在我的瀏覽器中:

enter image description here

+0

@BillKervaski爲了支持用戶的動機,接受正確的答案是一個非常好的做法。請考慮在這裏做:) – nanocv

0

謝謝nanocv!這裏是你的解決方案改變了一點,直接回答這個問題:

$numberOfColumns = 3; 
$myArray = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25); 

$arrayLength = count($myArray); // 25 
$columnLength = ceil($arrayLength/$numberOfColumns); // 9 

for($i=0; $i<$columnLength; $i++) { 

    $table .= '<tr>'; 

    for ($j = 0; $j < $numberOfColumns; $j++) { 

     $arrayIndex = $j * $columnLength + $i; 

     if($arrayIndex < $arrayLength) { 
      $table .= '<td>' . $myArray[$arrayIndex] . '</td>'; 
     } else { 
      $table .= '<td></td>'; // render empty cells 
     } 

    } 

    $table .= '</tr>'; 
} 

echo '<table border="1">' . $table . '</table>'; 
+0

對不起,我不知道你想用數據建立一個HTML表格。我很高興你能找到解決問題的辦法!請考慮接受我的答案。 – nanocv