我需要一个解决方案来在两个索引未知的数组之间获得相同的值。
例如,这里是第一个数组$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和第2个数组的常用值。
相同的值是
1.[field_name] => Beauty - Care [zonegeo] => Angola
2.[field_name] => Beauty - Care [zonegeo] => Swaziland
我试过了array_intersect($a, $b)
,但它没有用。
答案 0 :(得分:0)
问题是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;
});
答案 1 :(得分: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));
}
Out put:
Array
(
[3] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Angola
)
[5] => Array
(
[field_name] => Beauty - Care
[zonegeo] => Swaziland
)
)