我有兩個數組array1和array2,我用它來填充一個表,以便array1 [5]和array2 [5]都填充同一行,但我想要編寫一個同時刪除array1 [i]和array2 [i]的函數,如果對於j小於i的某個j,array1 [i]是array1 [j]的複本,其中i是任意正整數。如何查找數組中重複值的索引
爲了完成這個工作,我需要計算array1中重複值的索引,然後使用這些信息從數組1和數組2中爲這些索引刪除條目,然後填充我的表。
任何想法感激地收到。
謝謝。
我有兩個數組array1和array2,我用它來填充一個表,以便array1 [5]和array2 [5]都填充同一行,但我想要編寫一個同時刪除array1 [i]和array2 [i]的函數,如果對於j小於i的某個j,array1 [i]是array1 [j]的複本,其中i是任意正整數。如何查找數組中重複值的索引
爲了完成這個工作,我需要計算array1中重複值的索引,然後使用這些信息從數組1和數組2中爲這些索引刪除條目,然後填充我的表。
任何想法感激地收到。
謝謝。
array_unique
函數刪除dupes,但保留鍵。然後,您可以遍歷其他數組並刪除第一個中不存在的鍵。
$array1 = array_unique($array1);
foreach ($array2 as $key => $val) {
if (!array_key_exists($key,$array1)) unset($array2[$key]);
}
$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的索引,你想保留具有最低密鑰的重複條目(如您所指出的可能是您的問題),那麼您需要首先對數組進行排序。如果你不這樣做,你會得到每個重複值的數組中的第一個條目,而不是最低的鍵。比較
$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);
工作就像一個魅力,謝謝。 –