【问题标题】:Splitting of array into multiple arrays将数组拆分为多个数组
【发布时间】:2016-11-16 22:43:20
【问题描述】:

我有一个动态长度为 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]

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

【问题讨论】:

标签: php arrays


【解决方案1】:

如果您需要这种可变数组长度的块,那么您可以使用简单的foreacharray_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
        )

)

【讨论】:

  • 谢谢!!这行得通。如何访问 result_arr 的单个元素?
  • 这是您在这里需要做的最简单的事情
  • 您可以使用echo $result_arr[0][0]; 等方式访问它的值。
  • 是的,想通了。谢谢
【解决方案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,
  ),
)

【讨论】:

    【解决方案3】:

    给你

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多