我有两个数组:
$arr1 = array('a' => 10, 'b' => 20);
$arr2 = array('a' => 10, 'b' => 20, 'c' => 30);
如何使用 array_filter 删除$arr2
不存在的元素$arr1
?就像我的例子中的“c”......
有一个专门为此目的制作的函数:array_intersect():
array_intersect — 计算数组的交集
$arr2 = array_intersect($arr1, $arr2);
如果要比较键,而不是像array_intersect()这样的值,请使用array_intersect_key():
array_intersect_key — 使用键计算数组的交集以进行比较
$arr2 = array_intersect_key($arr1, $arr2);
如果要比较key=>value
对,请使用array_intersect_assoc():
array_intersect_assoc — 计算带有附加索引检查的数组的交集
$arr2 = array_intersect_assoc($arr1, $arr2);
在你的 array_filter 回调中使用in_array :
$arr2 = array_filter($arr2, function($e) use ($arr1) {
return in_array($e, $arr1);
});
请注意,这将考虑元素的值,而不是键。array_filter 不会给你任何工作的关键,所以如果这是你需要的,一个常规的foreach循环可能更适合。
要基于键与数组相交:
array_intersect_key($arr1, $arr2);
更新
不幸的是,没有array_filter
基于数组键相交的解决方案:(