2012-05-03 21 views
0

私は、例えば1000個のキーを持つ2つの配列を持っています.1つは温度値を保持し、もう1つは時間を保持します。PHP:重複値の削除

例アレイ温度:

[0] = 3.1 
[1] = 4.3 
[2] = 4.1 
[3] = 5.1 
[4] = 4.1 

例の時間配列:

[0] = 0 
[1] = 1 
[2] = 2 
[3] = 3 
[4] = 3 

これに伴う問題は、私は配列にこれらを組み合わせて、たとえば、pchartのためにこれを中にプロットするとき、私はあまりにも多くの価値を持っているということですX上でそれは混乱します。
したがって、重複した時間を削除して「NULL」で置き換えて不要な時間がx軸にプロットされないようにする必要があります。
私は重複の終わりに2番目は、時間の出力配列があるべき「NULL」に

を設定することができ、配列の最初の時間を維持したい:

[0] = 0 
[1] = 1 
[2] = 2 
[3] = 3 
[4] = NULL 
etc. 

答えて

2

あなたの配列はソートされていますので、どうですか?

$hours = array(0,1,2,3,3,4,4,5); 
$prev = -1; 
foreach ($hours as &$hour) { 
    if ($prev === $hour) { 
    $hour = NULL; 
    } 
    else { 
    $prev = $hour; 
    } 
} 
unset($hour); 
print_r($hours); // 0,1,2,3,NULL,4,NULL,5... 
+0

完璧、うまくいくようです:) – HyperDevil

3

は仕事のように聞こえますarray_unique()です。

array array_unique (array $array [, int $sort_flags = SORT_STRING ]) 

入力配列を取得し、重複した値せずに新しい配列を返します。

キーは保存されています。 array_unique()は最初に処理された値を としてソートし、次に の値ごとに最初に見つかったキーを保持し、すべてのキーを無視します。これは、ソートされていない配列の最初の関連値 のキーが保持されることを意味しません。

注:2つの要素は、(string) $elem1 === (string) $elem2の場合にのみ等しいとみなされます。言葉では:文字列表現が同じ場合。最初の要素が使用されます。


あなたが持続する配列のキーが必要な場合は、array_map()で何かを試すことができます。あなたは重複を削除したい場合は

<?php 

//Variable initialization 
$array = array(
    0 => 0, 
    1 => 1, 
    2 => 2, 
    3 => 3, 
    4 => 3 
); 
$temp = array(); 

$array = array_map(function($element) use (&$temp) { 
    if (!in_array($element, $temp)) { 
     $temp[] = $element; 
     return $element; 
    } 
    return null; 
}, $array); 

print_r($array); 
+1

両方の配列に同じ量のキーを保持する必要があります。時系列の重複キーは、削除されずにNULLに設定する必要があります。 – HyperDevil

+0

@HyperDevil:自分の答えを編集しました。グローバルよりも良い方法を見つけようとします。 –

+0

@hakreありがとう –

0

は完全にあなたはarray_unique() を使用することができますが、それはNULLにそれらを設定して文句を言いません。

-2

たぶん、このトリックはそれをしない:

$simplified = array_combine($hours, $temperatures); 

$hours = array_keys($simplified); 
$temperatures = array_values($simplified); 

これはNULLに物事を設定しませんが、完全に、私はあなたが探しているものだと思っているそれらを削除します。そうでなければ、これはそれを行う必要があります。

foreach(array_slice(array_reverse(array_keys($hours)), 0, -1) as $i) 
    ($hours[$i] === $hours[$i-1]) && $hours[$i] = NULL; 

Demo

+0

私はそれが必要なので、NULLに設定して削除しないでください。 – HyperDevil

+0

本当に必要なのか分かりません。試してみて、報告してください(あなたがこれをテストしない限り、私はあなたを信用しません:)) – hakre

+0

これは、両方で 'array_unique()'を使うより良い/違うのですか? –

1

あなたは、PHP 5.3使用している場合:

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

array_walk($a, function(&$item) { 
    static $encountered = array(); 
    if(in_array($item, $encountered)) { 
    $item = null; 
    return; 
    } 
    $encountered[] = $item; 
}); 

var_dump($a); 

のキーの数を保持します。 Array_walkはすべてのキーに対してユーザー関数を呼び出します。staticは、関数のスコープ内で$に遭遇した配列が実行の間にとどまるようにします。