array_diff()处理第二个数组中的重复项,它存在于第一个数组中

时间:2014-09-03 13:04:15

标签: php arrays

这可能是一个非常简单的问题,但在尝试解决它几个小时后,我认为我的大脑现在正在寻找解决方案的一个非常狭窄和特定的角度。我甚至可能使用了错误的功能!!

我有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");

on array_diff ($dummy2 , $dummy1 );

正确输出:Array ( [0] => 518 )

有问题的场景:我有这两个数组,不同之处在于第二个数组有一个重复的值,即有一个额外的值,恰好与第一个数组之一相同#39; s值。

$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 个答案:

答案 0 :(得分:2)

只需将重复值添加到输出中:

$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( ... ));