array_filter基于另一个数组的键

时间:2012-06-05 09:04:26

标签: php arrays

我有两个数组:

$arr1 = array('a' => 10, 'b' => 20);

$arr2 = array('a' => 10, 'b' => 20, 'c' => 30);

如何使用array_filter删除$arr2$arr1中不存在的{{1}}元素?就像我的例子中的“c”......

3 个答案:

答案 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解决方案可以交叉:(