2016-07-14 3 views
0

У меня есть массив динамической длины L1. Мне нужно разбить этот массив на число массивов L2, каждый из которых имеет LEN[i] номеров из исходного массива.Разделение массива на несколько массивов

EX: 
Original: 

$array=[1,2,3,4,5,6,7,8,9,10] 

Here L1=10 

L2=3 

$LEN=[3,3,4] 

So the 3 arrays will be 

$a1=[1,2,3] 

$a2=[4,5,6] 

$a3=[7,8,9,10] 

Я пробовал много способов, но ничего не работает. Любая помощь будет принята с благодарностью.

+0

Покажите нам, что вы попробовали. –

+1

array_chunk https://php.net/manual/en/function.array-chunk.php почти достанется вам. – Progrock

+1

Опубликовать ваши попытки –

ответ

3

Если вам нужна такая переменная длина массива кусков, то вы можете создать свою собственную функциональность с помощью простых foreach и array_splice вроде как

$array=[1,2,3,4,5,6,7,8,9,10]; 

$arr = [3,3,4]; 
$result_arr = []; 
foreach($arr as $k => $v){ 
    $result_arr[$k] = array_splice($array,0,$v); 
} 
print_R($result_arr); 

Выхода:

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 

    [1] => Array 
     (
      [0] => 4 
      [1] => 5 
      [2] => 6 
     ) 

    [2] => Array 
     (
      [0] => 7 
      [1] => 8 
      [2] => 9 
      [3] => 10 
     ) 

) 
+0

Спасибо! Это работает. Как я могу получить доступ к отдельному элементу result_arr? –

+0

Это самая простая вещь, которую вам нужно сделать здесь –

+0

, вы можете получить к ней значение с помощью 'echo $ result_arr [0] [0];' и так далее. –

1
<?php 

$input  = range(1,11); 
$chunk_size = 3; 
$output  = array_chunk($input, $chunk_size); 

// If we can't chunk into equal sized parts merge the last two arrays. 
if(count($input) % $chunk_size) { 
    $leftovers = array_pop($output); 
    $last  = array_pop($output); 
    array_push($output, array_merge($last, $leftovers)); 
} 

var_export($output); 

Выхода :

array (
    0 => 
    array (
    0 => 1, 
    1 => 2, 
    2 => 3, 
), 
    1 => 
    array (
    0 => 4, 
    1 => 5, 
    2 => 6, 
), 
    2 => 
    array (
    0 => 7, 
    1 => 8, 
    2 => 9, 
    3 => 10, 
    4 => 11, 
), 
) 
Смежные вопросы