我有两个多维数组,数组中的每个元素由2个元素组成,第一个是字符串,第二个是整数。我想基于第二个值来区分两个多维数组,当且仅当第一个元素相等时。我正在使用array_udiff
,如下所示:
$arrdiff = array_udiff($arr1, $arr2, 'udiffCompare');
我实现了函数array_udiff
,这样如果第一个元素不同,则返回它们相等,因为我不希望它出现在差异中,如果第一个元素相等,则比较第二个元素并相应返回,下面是我实现的函数
function udiffCompare($a, $b) {
return strcmp($a[0], $b[0]) == 0 ? $ a[1] - $b[1] : 0;
}
但是,即使我有两个具有相同第一个元素但第二个元素不同的数组,它们也不会在array_udiff
函数的结果中返回。
我在这里遗漏了什么?任何帮助表示赞赏。
答案 0 :(得分:1)
问题是,你在交叉路口寻找差异,只使用差异函数。
尝试根据字符串值计算交集,并使用结果根据int值计算差异。
function sameString ($a, $b) {
return strcmp($a[0], $b[0]);
}
function differentInt($a, $b) {
return $a[1] - $b[1];
}
$diff = array_udiff(array_uintersect($arr1, $arr2, 'sameString'), $arr2, 'differentInt');