这可能是一个非常简单的问题,但在尝试解决几个小时后,我认为我的大脑现在正在以非常狭窄和特定的角度寻找解决方案。我什至可能使用了错误的功能!!
我有 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()
的一些其他奇怪/复杂的混合体
谢谢!我的想法/经验用完了。
最佳答案
只需将重复的值添加到输出中即可:
$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_unique
在你的输出上:var_dump(array_unique( ... ));
关于php - array_diff() 处理第二个数组中存在于第一个数组中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645124/