我有两个数组:
$array1 = array('red', 'blue', 'green', 'yellow');
$array2 = array('red', 'blue', 'green', 'yellow', 'blue', 'black');
我想知道它们之间的区别。
array_diff()
可以用来告诉我黑色只出现在第二个数组
array_unique()
只会向我显示唯一值/删除重复值,但不会告诉我blue
是由于唯一而删除的值。
是否有函数告诉我第二个数组中的重复值(blue
)?
答案 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
,那么我们就会有重复。
答案 1 :(得分:2)
查找数组中的重复项
$result = array_filter(array_count_values($array2), function ($val) {
return $val > 1;
});
$duplicates = array_keys($result);
输出:
Array
(
[0] => blue
)
答案 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)
您可以通过将$array2
与array_unique($array2)
进行比较来获得差异:
print_r(array_diff_assoc($array2, array_unique($array2)));
输出:
Array
(
[4] => blue
)
它不是最有效的,但它具有了解重复索引的优点。