2016-02-05 61 views
4

的大小我有這樣獲取二維陣列的尺寸相對於一維數組

$arr=array('1','2','3','4','5','6','7','8','9','10','11','12','13'......'21'); 

從這個我想創建一個二維數組是這樣的一個二維陣列。

enter image description here

2D陣列的維數是依賴於一維數組中的元素數目。

條件

1.數2D陣列的行的固定爲5

2.列數可以變化。

3.Third行將除最後元件

大小的一個維陣列的是變化的空的。

我們需要獲得二維數組的維數還可以如何打印它?

UPDATE

這裏是我的代碼

$k=0; 
$l=0; 
$i=0; 
$A=array('1','2','3','4','5','6','7','8','9','10'); 
//size of 1D array 
$size=count($arr); 
//2D array 
$B=[]; 
$x=?;//no of columns of 2d array 
$y=5;//no of rows of 2d array 

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

     $B[k][l]=$A[i]; 
     $k++; 

     if($k==2 && $l!=$x){ 
       $k++; 

     } 
     if($k==4){ 
       $l++; 
     } 

} 

我怎樣才能獲得的$x值是二維數組的列大小

+1

你嘗試到現在?把你的代碼努力? –

+0

讓我更新我的代碼。 –

+1

聽起來像一個作業問題 – Asperon

回答

1

試試這個:(編輯:陣列解決方案還下面添加) 我已經使用了一個模擬數組的循環,而不是1D數組。假設:如果最後一列中有任何項目(例如樣本輸入10),則第二個最後一列將具有*,而不管項目是否到達第3行。

$itemCount = 49; 

$residual = $itemCount % 4; 

$starCount = ceil($itemCount/4); 

if ($residual > 1) { 
    $starCount -= 1; 
} else if ($residual) { 
    $starCount -= 2; 
} 



$itemsArray = []; 
$key = 0; 
for ($i = 1 ; $i <= $itemCount ; $i++) { 
    $key = $key % 5 ; // fixing the offset and row number 
    if ($key == 2 && $starCount) { 
     $itemsArray[$key][] = '*'; 
     $starCount--; 
    $key++; 
     $itemsArray[$key][] = $i; 
    } else { 
     $itemsArray[$key][] = $i; 
    } 
    $key++; 

} 

print_r($itemsArray); //check output 

測試21,49,50,51,將顯示星1小於列數爲假設提及。(它可以,如果你想改變通過改變殘留檢查計數值)

注意:我將離開打印部分,因爲這取決於您(您想要在命令行或網頁上打印它)。此外,它只是一個循環結果的問題。 而對於這個代碼的數組版本,你可以把

$itemCount = count($yourArray);

更換與foreach ($yourArray as $i)環(或有意義的事都超過$改變我。)

輸出

1 5 9 13 17 
2 6 10 14 18 
* * * * 19 
3 7 11 15 20 
4 8 12 16 21 
1 5 9 13 17 21 25 29 33 37 41 45 
2 6 10 14 18 22 26 30 34 38 42 46 
* * * * * * * * * * * 47 
3 7 11 15 19 23 27 31 35 39 43 48 
4 8 12 16 20 24 28 32 36 40 44 49 
1 5 9 13 17 21 25 29 33 37 41 45 49 
2 6 10 14 18 22 26 30 34 38 42 46 50 
* * * * * * * * * * * * 
3 7 11 15 19 23 27 31 35 39 43 47 
4 8 12 16 20 24 28 32 36 40 44 48 
1 5 9 13 17 21 25 29 33 37 41 45 49 
2 6 10 14 18 22 26 30 34 38 42 46 50 
* * * * * * * * * * * * 51 
3 7 11 15 19 23 27 31 35 39 43 47 
4 8 12 16 20 24 28 32 36 40 44 48 

參考陣列基於溶液:

<?php 

$itemCount = 21; 


$array = range(1,$itemCount);// the 1D array 
$residual = $itemCount % 4; 

$starCount = ceil($itemCount/4); 

if ($residual > 1) { 
    $starCount -= 1; 
} else if ($residual) { 
    $starCount -= 2; 
} 



$itemsArray = []; 
$key = 0; 
foreach ($array as $i) { 
    $key = $key % 5 ; // fixing the offset and row number 
    if ($key == 2 && $starCount) { 
     $itemsArray[$key][] = '*'; 
     $starCount--; 
    $key++; 
     $itemsArray[$key][] = $i; 
    } else { 
     $itemsArray[$key][] = $i; 
    } 
    $key++; 

} 

print_r($itemsArray); //check output 
+0

當'$ itemCount = 49'倒數第二和最後一列有元素在第三排 –

+0

@shammon see edit – codisfy

0

這適用於任何長度的任何數組:

<?php 
$arr=array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21'); 
$len=count($arr); 
$key=0; 
$rows=5; 
$cols=floor(($len - 2)/4) + 1; 
for ($j=0;$j<$cols;$j++) 
    for ($i=0;$i<$rows;$i++)      
     if ($i==2 && $j!=$cols-1) { 
      $arr2D[$i][$j] = '*'; 
     } else {   
      $arr2D[$i][$j] = $key>=$len ? "" : $arr[$key++]; 
     } 
//print array 
echo "<table>"; 
for ($i=0;$i<$rows;$i++){ 
    echo "<tr>"; 
    for ($j=0;$j<$cols;$j++)  
     echo "<td width='30px'>" . $arr2D[$i][$j] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 
?> 

輸出:

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

可以使用下面的方法來生成期望的網格結構。此方法適用於任意大小的陣列。

更新代碼:

$arr = array('1','2','3','4','5','6','7','8','9','10', '11'); 

$arrLength = count($arr); 
$columns = ceil($arrLength/4); 
$rows = ($columns == 1) ? (($arrLength > 2) ? $arrLength + 1 : $arrLength) : 5; 

echo "Grid dimension: " . $rows . " x " . $columns . "<br />"; 

$output_array = array(); 
$index = 0; 
for($i = 0; $i < $columns; ++$i){ 
    for($j = 0; $j < $rows; ++$j){ 
     if($j == 2 && ($i != $columns - 1 || $columns == 1)){ 
      $output_array[$j][$i] = "*"; 
      continue; 
     } 
     $output_array[$j][$i] = isset($arr[$index]) ? $arr[$index] : ""; 
     ++$index; 
    } 
} 

// display $output_array 
for($i = 0; $i < $rows; ++$i){ 
    for($j = 0; $j < $columns; ++$j){ 
     echo $output_array[$i][$j] . " "; 
    } 
    echo "<br />"; 
} 

輸出:

Grid dimension: 5 x 3 
1 5 9 
2 6 10 
* * 11 
3 7 
4 8