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 に答える