2014-09-03 53 views
2

这可能是一个非常简单的问题,但经过努力解决它了几个小时,我觉得我的大脑现在是在一个非常狭窄的搜索和解决方案的特定角度。我甚至可能会使用错误的功能!和array_diff()处理重复第二阵列中,存在于第一个

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

有问题的情形:我有这些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"); 

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()
  • 混合物

谢谢!我用完了想法/经验。

回答

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

+0

不知怎的,我知道这将是一个“只要添加..”解决方案!谢谢:D – Alexandros 2014-09-03 13:16:48

相关问题