php – 获取相对于1D数组大小的2D数组的尺寸

我有这样的一维数组

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

从这里我想创建一个像这样的二维数组.

《php – 获取相对于1D数组大小的2D数组的尺寸》

2D阵列的尺寸取决于1D阵列中的元素数量.

条件

1.二维数组的行数固定为5.

2.列数可能有所不同.

3.除最后一个元素外,第三行将为空

注意

一维阵列的大小是变化的.

我们需要获得2D数组的维度,我该如何打印它?

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的值,它是2D数组的列大小

最佳答案 试试这个:(编辑:数组解决方案也在下面添加)

我使用了一个模拟数组的循环,而不是一维数组.

假设:如果最后一列中有任何项目(例如样本输入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替换for循环($yourArray为$i)(或用全部有意义的东西改变$i.)

产量

21

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

49

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

50

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

51

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
点赞