1
<?php
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2));
?>

php手册中的这个例子将输出:

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

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

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

)

但我需要有一个固定大小的间隔。所以最后一个值应该是:

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

任何想法?

4

2 回答 2

2
$size = 3;
$input_array = array('a', 'b', 'c', 'd', 'e');

$result = array_chunk(
    array_merge(
        $input_array, 
        ((count($input_array) % $size) == 0) 
            ? array()
            : array_fill(
                  0,
                  $size - (count($input_array) % $size), 
                  NULL
              )
    ), 
    $size
);

var_dump($result);
于 2013-07-15T23:13:28.927 回答
1

不知道这是否是最佳做法,但我会这样做。

<?php
function arr_chunk($input_array, $chunk_size, $fixed=null) {
    if (is_null($fixed)) {
        $fixed = $chunk_size;
    }
    $chunked = array_chunk($input_array, $chunk_size);
    for ($i = 0; $i < count($chunked); $i++) {
        while (count($chunked[$i]) < $fixed) {
            $chunked[$i][] = null;
        }
    }
    return $chunked;
}

$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(arr_chunk($input_array, 2));
?>

where作为附加参数,或设置为arr_array给所有数组块相同的长度。$fixed$chunk_size

于 2013-07-15T23:12:51.097 回答