将平面数组拆分为多个数组,其具体计数由另一个整数数组决定

问题描述 投票:0回答:3

我有一个动态长度 L1 的数组。我需要将此数组拆分为 L2 个数组,每个数组都有原始数组中的

LEN[i]
数字。

输入数组:

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

$LEN
说明每个新数组应包含多少个元素。这 3 个数组将是:

$a1 = [1,2,3]

$a2 = [4,5,6]

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

我尝试了很多方法,但似乎没有任何效果。 任何帮助将不胜感激。

php arrays split
3个回答
6
投票

如果您需要这样一个可变的块数组长度,那么您可以使用简单的

foreach
array_splice
创建自己的功能,如 as

$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
        )

)

2
投票
<?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,
  ),
)

0
投票

给你

function SplitLike($array, $groups)
{
   $result = [];
   $left = count($array);
   foreach ($groups as $i => $group) {
       $result[$i] = array_slice($array, count($array) - $left, $group);
       $left -= $group;
   }
   return $result;
}
© www.soinside.com 2019 - 2024. All rights reserved.