2016-11-19 74 views
0

在输入阵列具有这样形成的:如何通过数组拆分数组?

Array 
(
    [0] => 10 
    [1] => -1 
    [2] => -1 
    [3] => -1 
    [4] => -1 
    [5] => 15 
    [6] => 16 
    [7] => 17 
    [8] => -1 
    [9] => -1 
    [10] => 20 
) 

如何我可以拆分为它具有-1作为输出东西,所以值:

Array 
(
    [0] => 10 
    [1] => Array 
     (
      [0] => 15 
      [1] => 16 
      [2] => 17 
     ) 
    [2] => Array 
     ( 
      [0] => 20 
     ) 
) 

在PHP explode()函数适用于字符串输入。虽然这是数组的东西。

+1

为什么不为10的单独阵列内? – Rizier123

+0

这种情况下的值都是整数。 –

+0

为什么我想分割数组为-1的值。 –

回答

1
1 <?php 
    2  $array = [10, -1, -1, -1, -1, 15, 16, 17, -1, -1, 20]; 
    3  $tempArray = []; 
    4  $result = []; 
    5  foreach($array as $item) 
    6  { 
    7   if($item == -1) 
    8   { 
    9    if(count($tempArray)) 
10    { 
11     $result[] = $tempArray; 
12     $tempArray = []; 
13    } 
14   } 
15   else 
16    $tempArray[] = $item; 
17 
18  } 
19  if(count($tempArray)) 
20  { 
21   $result[] = $tempArray; 
22  } 
23  echo json_encode($result); 

,其结果是,

~$ php cal.php 
[[10],[15,16,17],[20]] 
+0

几乎,除了在所需的输出索引0是一个值,而不是一个数组。 – Xorifelse

+0

是啊这里不确定,如果在数组的开头有多个非-1元素? – 2016-11-19 12:38:27

+0

工作非常好!谢谢。 –

0

这不完全一样的结果,使用array_uniqueunset

$array = array_unique($array); 

foreach ($array as $k=>$item) { 
    if($item == '-1'){ 
     unset($array[$k]); 
    } 
} 

输出

array(5) { 
    [0]=> 
    int(10) 
    [5]=> 
    int(15) 
    [6]=> 
    int(16) 
    [7]=> 
    int(17) 
    [10]=> 
    int(20) 
} 
+0

不需要从数组中删除-1值,但为-1值拆分数组。为了更加正确,请考虑explode()函数。它适用于字符串,但假设有一个数组而不是一个字符串。结果应该是:explode($ delimiter,$ array),但是当然爆炸会使数组拆分为分隔符的字符串。在这种情况下(正如我所问)爆炸从一个数组开始创建一个数组,以便为​​其赋值。 –

1

那么这里是搜索解决方案ñ为你。

$myAry = array(
    '0' => 10, 
    '1' => -1, 
    '2' => -1, 
    '3' => -1, 
    '4' => -1, 
    '5' => 15, 
    '6' => 16, 
    '7' => 17, 
    '8' => -1, 
    '9' => -1, 
    '10' => 20 
); 

$newAry = Array(); 

function splitArray($ary , $index){ 
    global $newAry; 
    if($index == count($ary)){ 
     return $newAry; 
    } 
    if($ary[$index] != -1){ 
     $chunk = array(); 
     while( $index < count($ary) && $ary[$index] != -1){ 
      array_push($chunk , $ary[$index]); 
      $index++; 
     } 
     array_push($newAry , $chunk); 
     splitArray($ary , $index); 

    } else { 
     $index++; 
     splitArray($ary , $index); 
    } 
} 


splitArray($myAry , 0); 
print_r($newAry); 

输出:

Array ( 
[0] => Array ([0] => 10) 
[1] => Array ([0] => 15 [1] => 16 [2] => 17) 
[2] => Array ([0] => 20) 
    ) 
+0

谢谢,工作也很好。 –