将平面数组拆分为二维数组,每行包含 N 个元素(用空元素填充以确保完整行)

问题描述 投票:0回答:4

我的数组形式的数据为:

0 => a,
1 => b,
2 => c,
3 => d,
4 => e,
5 => f,
6 => g

如何将这些数组转换为以下数组?

0 => array(0 => a, 1 => b),
1 => array(0 => c, 1 => d),
2 => array(0 => e, 1 => f),
3 => array(0 => g, 1 => null)
php arrays grouping
4个回答
2
投票

用户 array_chunk() 函数将数组分割成块,以及 2nd 参数块大小

array_chunk($arr, 2);

1
投票
如果元素数量不等,

Chunk 将不会按照要求给出

null

$by = 2;
$arr = range('a', 'g');
$arr = array_merge($arr, count($arr) % $by ?
       array_fill(0, $by - count($arr) % $by, null) : array()); 
var_dump(array_chunk($arr, $by));

0
投票

现场演示

考虑这段代码:

$j = 0;
for($i=0; $i< count($arr); $i++){
    if(($i !=0) && (($i % 2) == 0)){
        $j++;
    }
    $newArray[$j][] = $arr[$i];
}

$lastElement = count($newArray) -1;
if(count($newArray[$lastElement]) < 2){
    $newArray[$lastElement][]= null;
}
    
echo "<pre>";
print_r($newArray); 

输出:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => c
            [1] => d
        )

    [2] => Array
        (
            [0] => e
            [1] => f
        )

    [3] => Array
        (
            [0] => g
            [1] => 
        )

)

0
投票

迭代并将每个块填充到 N 个元素。 演示

$n = 2;
var_export(
    array_map(fn($chunk) => array_pad($chunk, $n, null), array_chunk($array, $n))
);

将输入数组填充为可被 N 整除,然后分块。 演示

$n = 2;
var_export(
    array_chunk(array_pad($array, $n * ceil(count($array) / $n), null), $n)
);

无条件地将空填充数组与分块数组的最后一个条目合并。 演示

$n = 2;
$result = array_chunk($array, $n);
$result[intdiv(count($array), $n)] += array_fill(0, $n, null);
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.