我需要一个解决方案来在两个具有未知索引的数组之间获取相同的值。
例如这里的第一个数组$a
,
Array(
[0] => Array
(
[field_name] => Aerospace
[zonegeo] => Angola
)
[1] => Array
(
[field_name] => Aerospace
[zonegeo] => Cameroon
)
[2] => Array
(
[field_name] => Aerospace
[zonegeo] => Congo
)
[3] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Angola
)
[4] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Cameroon
)
[5] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Swaziland
)
)
第二个数组$b
:
Array(
[0] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Angola
)
[1] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Swaziland
)
)
我想得到第三个数组,其中包含第一个和第二个数组的通用值。
相同的值是
1.[field_name] => Beauty - Care [zonegeo] => Angola
2.[field_name] => Beauty - Care [zonegeo] => Swaziland
我试过array_intersect($a, $b)
但它不起作用。
问题是array_intersect
使用字符串比较,当数组转换为字符串时,它们都是相等的,所以它们最终都位于交集。(你会得到一堆数组到字符串的转换通知,这也不是很好。若要将内部数组作为数组进行比较,可以使用 array_uintersect
,以及比较数组的回调。
$x = array_uintersect($a, $b, function($a, $b) {
return $a <=> $b;
});
如果您没有 PHP 7,那么您不能使用 <=>
运算符,因此您需要更多行来复制其功能。
$x = array_uintersect($a, $b, function($a, $b) {
if ($a < $b) return -1;
if ($a > $b) return 1;
return 0;
});
检查此解决方案。考虑到两个数组的键相同/匹配。
//Computes the intersection of arrays, compares data by a callback function
$intersect_array = array_uintersect($a, $b, 'compareArray');
print_r($intersect_array );
// call back function code
function compareArray($val1, $val2){
// convert the array to string by serialize and compare the strings
return strcmp(serialize($val1), serialize($val2));
}
输出:
Array
(
[3] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Angola
)
[5] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Swaziland
)
)