/ / Como converter matriz plana para uma matriz multidimensional? - php, matrizes, array multidimensional

Como converter um array plano em um array multidimensional? - php, matrizes, array multidimensional

Qual é a melhor maneira de converter matriz como:

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

para:

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

Eu vim com algo como:

$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;
}

Melhores soluções são bem vindas.

Respostas:

1 para resposta № 1

O PHP tem uma função interna que faz exatamente isso: array_chunk():

Agrupa uma matriz em matrizes com elementos de tamanho. O último bloco pode conter menos que elementos de tamanho.

Uso:

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

Demo


1 para resposta № 2

Uma abordagem diferente usando nem array_slice nem array_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 );