2013-12-16 105 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

检查['array_slice'文档页面](http://php.net/array_slice)“[另请参阅](http://php.net/array_slice#refsect1-function.array-slice-seealso) – 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);