2016-11-19 73 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

謝謝,工作也很好。 –