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

Этот пример из PHP Manual будет выводить следующее:массив с фиксированным интервалом размером

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

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

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

) 

Но мне нужно иметь интервал с фиксированным размером. Таким образом, последнее значение должно быть:

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

Любая идея?

ответ

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); 
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)); 
?> 

Где arr_array принимает $fixed в качестве дополнительного аргумента, или установлен в $chunk_size давая все массивы Кусков ту же длину.

Смежные вопросы