array_filter基于另一个数组的键

Ale*_*lex 3 php arrays

我有两个数组:

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

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

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

Jer*_*oen 8

有一个专门为此目的而制作的函数:array_intersect():

array_intersect - 计算数组的交集

$arr2 = array_intersect($arr1, $arr2);
Run Code Online (Sandbox Code Playgroud)

如果要比较键而不是像array_intersect()这样的值,请使用array_intersect_key():

array_intersect_key - 使用键进行比较来计算数组的交集

$arr2 = array_intersect_key($arr1, $arr2); 
Run Code Online (Sandbox Code Playgroud)

如果要比较key=>value对,请使用array_intersect_assoc():

array_intersect_assoc - 使用附加索引检查计算数组的交集

$arr2 = array_intersect_assoc($arr1, $arr2); 
Run Code Online (Sandbox Code Playgroud)


Emi*_*röm 5

在array_filter回调中使用in_array

$arr2 = array_filter($arr2, function($e) use ($arr1) {
    return in_array($e, $arr1);
  });
Run Code Online (Sandbox Code Playgroud)

请注意,这将考虑元素的,而不是键。array_filter不会为您提供任何可用的键,因此如果您需要这样做,则常规的foreach循环可能更适合。