在数组中找到所有的差异

3

我有两个数组:

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

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

我想了解它们之间的区别。

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

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

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


你需要自己编写一个方法来实现此功能。 - rockStar
https://dev59.com/HGw15IYBdhLWcg3wqNuM - Joe Packer
你想同时知道这些值的键吗? - Ja͢ck
5个回答

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" }

注意:输出为“blue”和“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
)

在线演示


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
你可以通过将$array2array_unique($array2)进行比较来获取它们的不同之处,如下所示:
print_r(array_diff_assoc($array2, array_unique($array2)));

输出:

Array
(
    [4] => blue
)

虽然不是最高效的方法,但它具有知道重复索引的优点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接