我有两个数组:
$arr1 = array('a' => 10, 'b' => 20);
$arr2 = array('a' => 10, 'b' => 20, 'c' => 30);
如何使用array_filter删除$arr2
中$arr1
中不存在的{{1}}元素?就像我的例子中的“c”......
答案 0 :(得分:8)
有一个专门为此目的而制作的功能: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);
答案 1 :(得分:3)
在array_filter回调中使用in_array:
$arr2 = array_filter($arr2, function($e) use ($arr1) {
return in_array($e, $arr1);
});
请注意,这将考虑元素的值,而不是键。 array_filter不会为您提供任何密钥,因此如果您需要这样的常规foreach循环可能更适合。
答案 2 :(得分:1)
基于键交叉数组:
array_intersect_key($arr1, $arr2);
<强>更新强>
不幸的是,基于数组键没有array_filter
解决方案可以交叉:(