2013-12-16 3 views
0

Каков наилучший способ преобразовать массив как:Как преобразовать плоский массив в многомерный массив?

array(1,2,3,4,5,6,7,8,9,10) 

к:

array(
    array(1,2,3), 
    array(4,5,6), 
    array(7,8,9), 
    array(10), 
); 

я придумал что-то вроде:

$flat = array(1,2,3,4,5,6,7,8,9,10); 
$colsLimit = 3; 
$offset = 0; 
$multi = array(); 

while($sliced = array_slice($flat, $offset, $colsLimit)) { 
    $multi[] = $sliced; 
    $offset += 3; 
} 

Лучше решения приветствуются.

+0

Что случилось с вашим решением? –

+1

Проверьте раздел [См. Также] (http://php.net/array_slice#refsect1-function.array-slice-seealso) "страницы документации' 'array_slice' '(http://php.net/array_slice) – zerkms

+0

@zerkms благодарит, пропустил это – drupality

ответ

1

PHP имеет встроенную функцию, которая делает именно это: array_chunk():

Куски массива в массивы с элементами размера. Последний фрагмент может содержать меньше элементов размера.

Использование:

$arr = array(1,2,3,4,5,6,7,8,9,10); 
$result = array_chunk($arr, 3); 

Demo.

1

Другой подход, использующий ни array_slicearray_chunk ни

$flat = array(1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10); 

$multi = array(($multiIndex = 0) => array()); 

foreach($flat as $value) 
     count($multi[ $multiIndex ]) == 3 
    ? $multi[ ++$multiIndex ] = array($value) 
    : $multi[ $multiIndex ][ ] = $value 
    ; 

var_dump($multi); 
Смежные вопросы