2011-10-31 13 views
0

私は2つの配列、array1とarray2を使って、テーブルを作成して、array1 [5]とarray2 [5] array1 [i]がiより小さいいくつかのjについてarray1 [j]の複製である場合、array1 [i]とarray2 [i]の両方を削除する関数を記述する。ここで、iは任意の正の整数である。配列内の重複する値のインデックスを見つける方法

これを達成するために、私はarray1の重複した値のインデックスを作成し、この情報を使ってテーブルを作成する前にこれらのインデックスの配列1と配列2の両方のエントリを削除しました。

喜んで受け取ったアイデア。

ありがとうございました。

答えて

1

array_unique機能はダプを削除しますが、キーは保持します。次に、もう一方の配列を反復し、最初の配列に存在しないキーを削除するだけです。

$array1 = array_unique($array1); 
foreach ($array2 as $key => $val) { 
    if (!array_key_exists($key,$array1)) unset($array2[$key]); 
} 
+0

$array = array(5 => 'foo', 1 => 'bar', 2 => 'foo', 3 => 'bar'); $array = array_unique($array); var_dump($array); 

感謝の比較。 –

0
$array1_keys = array_keys($array1); // all keys 
$unique = array_keys(array_unique($array1)); // keys of unique values 
$duplicate = array_diff($array1_keys, $unique_keys); // keys of the duplicate values 
foreach($duplicate as $key){ 
    unset($array2[$key]); 
} 

追記:array_diffは、比較のために、文字列のキャストを使用することに注意してください。配列にスカラー以外の値が含まれている場合は、array_udiffを参照する必要があります。

編集:私の目にMingosポストは完全に質問に合っていなかった、私は間違っていたように見えます:D

0

をあなたの配列のキーは意味だけではなく、0から始まるインデックスであり、あなたが残しておきたい場合(あなたの質問からそうであるかもしれないことを示しているように)最も低いキーを持つ重複したエントリは、最初に配列をソートする必要があります。そうしないと、重複値ごとに配列の最初の項目が取得され、最も低い項目の項目は取得されません。 、魅力のように働いた

$array = array(5 => 'foo', 1 => 'bar', 2 => 'foo', 3 => 'bar'); 
ksort($array); 
$array = array_unique($array); 

var_dump($array); 
関連する問題