找出数组中的所有差异

时间:2014-02-18 18:17:30

标签: php arrays

我有两个数组:

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

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

我想知道它们之间的区别。

array_diff()可以用来告诉我黑色只出现在第二个数组

array_unique()只会向我显示唯一值/删除重复值,但不会告诉我blue是由于唯一而删除的值。

是否有函数告诉我第二个数组中的重复值(blue)?

5 个答案:

答案 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

答案 1 :(得分:2)

查找数组中的重复项

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

$duplicates = array_keys($result);

输出:

Array
(
    [0] => blue
)

Online demo

答案 2 :(得分: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"
}

答案 3 :(得分: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"
}

答案 4 :(得分:1)

您可以通过将$array2array_unique($array2)进行比较来获得差异:

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

输出:

Array
(
    [4] => blue
)

它不是最有效的,但它具有了解重复索引的优点。