2016-11-19 9 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 
     ) 
) 

explode()関数は、文字列の入力のために働くのphp。ここでは配列のためのものです。

+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要素があるかどうかはわかりません。 –

+0

非常にうまく動作します!ありがとう。 –

0

であることがarray_uniqueを使用して、まったく同じ結果ではないとunset

$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)しかし、もちろん、delimeterのために文字列を分割する配列を作ることはできません。この場合(私が尋ねたように)、配列を分けて値を与えるために分割して配列を作成します。 –

1

はsolutioですあなたのためにn。

$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

ありがとう、うまく動作します。 –

関連する問題