array_intersect()
是 PHP 中的一个内置函数,用于比较两个或多个数组,并返回一个包含所有输入数组共有的元素的新数组。当应用于二维数组时,这个函数会比较最外层的键值对,而不是内层的值。
问题:在使用 array_intersect()
比较二维数组时,为什么无法得到预期的结果?
原因:array_intersect()
默认比较的是数组的键和值,对于二维数组,它会比较最外层的键值对,而不是内层的值。
解决方法:
以下是一个自定义比较函数的示例,用于比较二维数组的内层值:
function array_intersect_2d($array1, $array2) {
$result = [];
foreach ($array1 as $key => $subArray) {
if (isset($array2[$key])) {
$result[$key] = array_intersect($subArray, $array2[$key]);
}
}
return $result;
}
$array1 = [
'a' => [1, 2, 3],
'b' => [4, 5, 6]
];
$array2 = [
'a' => [2, 3, 4],
'b' => [4, 5, 7]
];
$result = array_intersect_2d($array1, $array2);
print_r($result);
输出:
Array
(
[a] => Array
(
[1] => 2
[2] => 3
)
[b] => Array
(
[0] => 4
[1] => 5
)
)
在这个示例中,我们定义了一个名为 array_intersect_2d()
的函数,它接受两个二维数组作为参数,并返回它们的交集。这个函数首先遍历第一个数组的每个键值对,然后检查第二个数组是否存在相同的键。如果存在,则使用 array_intersect()
比较这两个子数组,并将结果存储在结果数组中。
领取专属 10元无门槛券
手把手带您无忧上云