在处理array_diff()时如何处理第二个数组中存在于第一个数组中的重复项

3

这可能是一个很简单的问题,但我试图解决它已经几个小时了,我觉得我的大脑现在正在一个非常狭窄和具体的角度寻找解决方案。我甚至可能使用了错误的函数!!

我有2个数组,我想要两个数组之间的任何可能的差异。这对于简单的数组(如下所示)可以正常工作:

示例:

$dummy1 = array("0" => "508", "1" => "548", "2" => "558", "3" => "538", "4" => "563", "5" => "543");
$dummy2 = array("0" => "518", "1" => "548", "2" => "558", "3" => "538", "4" => "563", "6" => "543");

关于 array_diff ($dummy2 , $dummy1 ); 的正确输出是:Array ( [0] => 518 )

问题场景:我有两个数组,它们的区别在于第二个数组有一个重复值,即多了一个值,而这个值恰好与第一个数组中的一个值相同。

$array1 = array("0" => "508", "1" => "548", "2" => "558", "3" => "538", "4" => "563", "5" => "543");
$array2 = array("0" => "508", "1" => "508", "2" => "548", "3" => "558", "4" => "538", "5" => "563", "6" => "543");

echo count($array1).'<br>';
echo count($array2).'<br>'; //count is here for debugging purposes

现在使用array_diff($array2, $array1)函数 //或者其他的diff_()函数 我想要输出:Array ( [0] => 508 )//(额外的508值)
基本上,就是两个数组之间的任何可能的差异。 我尝试过:
  • 如果第一个检查为空,则反转数组
  • 一些与array_diff_assoc()有关的奇怪/复杂的混合
  • 一些与array_intersect()array_diff()有关的奇怪/复杂的混合
谢谢!我的想法和经验用完了。
1个回答

3
只需将重复的值添加到输出中即可:
$array1 = array("0" => "508", "1" => "548", "2" => "558", "3" => "538", "4" => "563", "5" => "543");
$array2 = array("0" => "508", "1" => "508", "2" => "548", "3" => "558", "4" => "538", "5" => "563", "6" => "543");

var_dump(array_diff($array2, $array1) + array_diff_assoc($array2, array_unique($array2)));

输出:

array(1) { [1]=> string(3) "508" }  // Use array_values(OUTPUT) to reset keys if needed

如果需要,您也可以添加array_diff_assoc($array1, array_unique($array1)),如果您想要处理存在差异和重复的情况,则可以在输出上重新使用array_uniquevar_dump(array_unique( ... ));


不知怎么的,我就知道这会是一个“只需添加...”的解决方案!谢谢:D - hahaha

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