2014-02-18 114 views
3

所有分歧,我有兩個數組:查找陣列

$array1 = array('red', 'blue', 'green', 'yellow'); 

$array2 = array('red', 'blue', 'green', 'yellow', 'blue', 'black'); 

我想知道它們之間的差異。

array_diff()可以用來告訴我,黑色僅出現在第二陣列中

array_unique()將只顯示我的唯一值/刪除重複值,但不告訴我,blue是值刪除,由於是獨特。

是否有函數告訴我第二個數組中的重複值(blue)?

+0

有沒有,你需要編寫你自己的方法。 – rockStar

+0

http://stackoverflow.com/questions/6460993/get-the-keys-for-duplicate-values-in-an-array –

+0

你想知道這些值的關鍵嗎? –

回答

2

沒有,但你可以使用我已經寫了下面的一個:

<?php 
// function 
function dupes_in_array($array){ 
    if(!is_array($array)) return 0; // check, if $array is an array 
    $arr = array_count_values($array); 
    foreach($arr as $key => $val) { if($val > 1) $duplicates[] = $key; } 
    return $duplicates; 
} 

// demonstration 
$array = array('red', 'blue', 'green', 'yellow', 'blue', 'black', 'green'); 
$dupes = dupes_in_array($array); 
echo "Duplicate values: "; 
var_dump($dupes); 

?> 

輸出:

Duplicate values: array(2) { [0]=> string(4) "blue" [1]=> string(5) "green" } 

注:輸出爲 「藍色」, 「綠色」,因爲輸入數組有兩個作爲重複。

如果$val>1,那麼我們有重複。

參考:array_count_values

2

查找重複的項目在數組中

$result = array_filter(array_count_values($array2), function ($val) { 
    return $val > 1; 
}); 

$duplicates = array_keys($result); 

輸出:

Array 
(
    [0] => blue 
) 

Online demo

1

如果您將保留鍵的值,array_diff_assoc將工作:

php > $a1 = array('red', 'blue', 'green', 'yellow', 'blue', 'black'); 
php > $a2 = array('red', 'blue', 'green', 'yellow'); 
php > var_dump(array_diff_assoc($a1,$a2)); 
array(2) { 
    [4]=> 
    string(4) "blue" 
    [5]=> 
    string(5) "black" 
} 
1

還不如扔在我的解決方案的組合:

<?php 

    $r1 = ["red","blue","green","yellow"]; 
    $r2 = ["red","blue","green","yellow","blue","black"]; 

    $diff = array_diff($r2,$r1); 
    $dupe = array_keys(array_filter(array_count_values($r2), function ($val){ 
         return $val > 1;})); 

    var_dump(array_merge($diff,$dupe)); 

?> 

輸出:

array(2) { 
    [0]=> 
    string(5) "black" 
    [1]=> 
    string(4) "blue" 
} 
1

您可以通過對array_unique($array2)這樣比較$array2獲得差異:

print_r(array_diff_assoc($array2, array_unique($array2))); 

輸出:

Array 
(
    [4] => blue 
) 

這不是最有效的,但它知道重複的指數的優勢。