3

我有两个数组:

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

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

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

4

3 回答 3

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); 
于 2012-06-05T09:09:55.840 回答
5

在你的 array_filter 回调中使用in_array :

$arr2 = array_filter($arr2, function($e) use ($arr1) {
    return in_array($e, $arr1);
  });

请注意,这将考虑元素的,而不是键。array_filter 不会给你任何工作的关键,所以如果这是你需要的,一个常规的foreach循环可能更适合。

于 2012-06-05T09:05:58.757 回答
1

要基于键与数组相交:

array_intersect_key($arr1, $arr2);

更新

不幸的是,没有array_filter基于数组键相交的解决方案:(

于 2012-06-05T09:14:05.767 回答