基于值重复的PHP拆分数组[关闭]

问题描述:

Here is an example array I want to split:

(1,2,3,4,5,0,6,7,0,8,9,10,11,12,0)

How do I split it in 3 arrays like this?

(1,2,3,4,5,0) (6,7,0) (8,9,10,11,12,0)

以下是我要拆分的示例数组: p>

   (1,2,3,4,5,0,6,7,0,8,9,10,11,12,0)
  code>  pre> 
 
 

怎么做 我把它分成3个这样的数组? p>

 (1,2,3,4,5,0)(6,7,0)(8,9,10,  11,12,0)
  code>  pre> 
  div>

Here's the solution. (Author said he wants to split at '0' instead of duplicate values)

function split_array_by_duplicate_values($a, $duplicate = 0)
{
    $c = array_intersect($a, array($duplicate));
    $r = array();
    $i = 0;
    foreach($c as $k => $v) {
        $l   = ++$k - $i;
        $r[] = array_slice($a, $i, $l);
        $i   = $k;
    }

    return $r;
}

$a = array(1,2,3,4,5,0,6,7,0,8,9,10,11,12,0);

print_r(split_array_by_duplicate_values($a));

returns

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

    [1] => Array
        (
            [0] => 6
            [1] => 7
            [2] => 0
        )

    [2] => Array
        (
            [0] => 8
            [1] => 9
            [2] => 10
            [3] => 11
            [4] => 12
            [5] => 0
        )

)

Try this:

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

$array_0 = array_splice($array, 0, 4);
$array_1 = array_splice($array, 4);

I think what you're looking for is array_splice.

$array=array(1,2,3,0,4,5,6);
$newarray=array_splice($array,4);
print_r($array); //Array ( [0] => 1 [1] => 2 [2] => 3 [3]=>0);
print_r($newarray); //Array( [0]=>4 [1]=>5 [2]=>6)

If you want to split an array into two arrays in one multidimensional array, you could do

$array=array(1,2,3,0,4,5,6);
$newarray=array_chunk($array,4); //returns [[1,2,3,0],[4,5,6]]

You should use array split to split the array as you would like

<?php
$input = array("a", "b", "c", "d", "e");

$output = array_slice($input, 2);      // returns "c", "d", and "e"
$output = array_slice($input, -2, 1);  // returns "d"
$output = array_slice($input, 0, 3);   // returns "a", "b", and "c"

// note the differences in the array keys
print_r(array_slice($input, 2, -1));
print_r(array_slice($input, 2, -1, true));
?>