2011-10-26 15 views
6

のリストのギャップ検索:私はこのような配列持た番号

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 10 
    [4] => 11 
    [5] => 12 
    [6] => 13 
    [7] => 14 
    [8] => 23 
    [9] => 24 
    [10] => 25 
) 

を、私は、それは次のようになりますので、ギャップを埋めるためにしたい:あなたは値を見れば

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => xxx 
    [4] => 10 
    [5] => 11 
    [6] => 12 
    [7] => 13 
    [8] => 14 
    [9] => xxx 
    [10] => 23 
    [11] => 24 
    [12] => 25 
) 

を最初の配列の1,2,3、次にギャップがあり、次に10,11,12,13,14そしてギャップがあり、次に23,24,25があります。どうすればこれらのギャップをプログラムで見つけることができますか?その場所の配列要素

最大2つのギャップがあります。

私はこれを行うには良い方法を考えていない、任意のアイデア?ありがとう。

+0

説明していただけますか? –

+0

私はより良い説明を追加しました。 – 472084

答えて

2

シンプルforループ、元の配列のコピーが、唯一の変更せず:

$repl = 'xxx'; 

for ($i=1; $i<count($array); $i++) { 
    $valueR = $array[$i]; 
    $valueL = $array[$i-1] === $repl ? $array[$i-2] : $array[$i-1]; 
    if ($valueR > $valueL + 1) { 
     array_splice($array, $i++, 0, $repl); 
    } 
} 
+0

+1スペースの複雑さを減らすために – Jordan

1

私はこのような何かをするだろう、テストではなく動作するはずです:)

$oldArray = array(1,2,3,10,11,12,13,24,25,26,27); 

$newArray = array(); 
for($i=0;$i<count($oldArray);$i++){ 
    $newArray[] = $oldArray[$i]; 
    if($oldArray[$i+1] - $oldArray[$i] != 1 && $i+1 != count($oldArray)) 
     $newArray[] = "xxx"; // seperator 
} 

var_dump($newArray); 

シャイ

+0

これは、配列の最後に余分なxxxを追加するようですか? – 472084

+0

更新されたコードを確認し、最後の項目ではないことを確認するためのチェックを追加しました。 –

1
$result = array(); 
if (count($oldArray) > 0) 
{ 
    $result[] = $oldArray[0]; 
    for ($i=1; $i<count($oldArray); $i++) 
    { 
     if ($oldArray[$i]-$oldArray[$i-1] != 1) 
      $result[] = "xxx"; 
     $result[] = $oldArray[$i]; 
    } 
} 
+0

これは元の配列要素のいくつかを削除します。 – 472084

+0

@Jleagleは古い答えをしました。更新されたものではありません。 –

+0

@ハサン・カーン:そこに2つの構文エラーがあります( '$'がありません)。そして、私は 'count($ result)'がこの時点でどのように0よりも大きくなるのか理解していません。 – netcoder

関連する問題