2011-10-31 82 views
0

我有兩個數組array1和array2,我用它來填充一個表,以便array1 [5]和array2 [5]都填充同一行,但我想要編寫一個同時刪除array1 [i]和array2 [i]的函數,如果對於j小於i的某個j,array1 [i]是array1 [j]的複本,其中i是任意正整數。如何查找數組中重複值的索引

爲了完成這個工作,我需要計算array1中重複值的索引,然後使用這些信息從數組1和數組2中爲這些索引刪除條目,然後填充我的表。

任何想法感激地收到。

謝謝。

回答

1

array_unique函數刪除dupes,但保留鍵。然後,您可以遍歷其他數組並刪除第一個中不存在的鍵。

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

工作就像一個魅力,謝謝。 –

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'); 
$array = array_unique($array); 

var_dump($array); 

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

var_dump($array);