如何将动态数组拆分为子数组

时间:2014-08-22 01:22:46

标签: php arrays

假设您有一个数组

    $input = array(1,1,1,2,2,3,3,4,5,5);

你想要分割数组,以便你在一个数组中包含所有1,在一个数组中包含所有2,等等。

但是,你不知道$ input数组是否只包含1个,或者只包含1个和2个,或者有多少个数字。

这些数字是按数字排序的。

4 个答案:

答案 0 :(得分:2)

array_count_values()可能对您有所帮助,请参阅下面的链接。

http://php.net/manual/en/function.array-count-values.php

答案 1 :(得分:1)

这是一个非常简单的方法,只需设置键和值,然后构建嵌套数组。

    $input = array(1,1,1,2,2,3,3,4,5,5);
    $output = array();
    foreach ( $input as $i ){
        if(!isset( $output[$i] ) ){
            $output[$i] = array();
        }
        $output[$i][] = $i;

    }
    echo '<pre>';
    var_export( $output );

输出

    array (
            1 =>
            array (
                    0 => 1,
                    1 => 1,
                    2 => 1,
            ),
            2 =>
            array (
                    0 => 2,
                    1 => 2,
            ),
            3 =>
            array (
                    0 => 3,
                    1 => 3,
            ),
            4 =>
            array (
                    0 => 4,
            ),
            5 =>
            array (
                    0 => 5,
                    1 => 5,
            ),
    )

输入

    $input = array(1,2,3,3,4,2,3,1,8,7);

输出

    array (
            1 =>
            array (
                    0 => 1,
                    1 => 1,
            ),
            2 =>
            array (
                    0 => 2,
                    1 => 2,
            ),
            3 =>
            array (
                    0 => 3,
                    1 => 3,
                    2 => 3,
            ),
            4 =>
            array (
                    0 => 4,
            ),
            8 =>
            array (
                    0 => 8,
            ),
            7 =>
            array (
                    0 => 7,
            ),
    )

答案 2 :(得分:0)

如果您不关心性能,可以使用简单的循环和array_slice()。跟踪您在$input数组中的位置,并在值更改时对数组进行切片。

$input = array(1,1,1,2,2,3,3,4,5,5);
$curr = $input[0];
$count = 0;
$offset = 0;
$length = 0;
$result_array = array();
foreach($input as $i)
{
  if($i != $curr)
  {
    $result_array[] = array_slice($input, $offset, $length);
    $curr = $i;
    $offset = $count;
    $length = 0;
  }
  $count++;
  $length++;
}
$result_array[] = array_slice($input, $offset);

答案 3 :(得分:-1)

不确定你正在寻找什么,但如果你想将它们分成一组分组成数组的相似值:

$input = array(1,1,1,2,2,3,3,4,5,5);
$parts = array_count_values($input);

foreach ($parts as $key => $val) {
    $parts[$key] = array_fill(0, $val, $key);
}

http://codepad.org/cxAL71r8

如果密钥需要连续且与您的值无关:

$parts = array_values($parts);

http://codepad.org/zHFpHBTY

如果是家庭作业,你应该先尝试做。如果你这样做,最好提供你在问题中尝试的内容。