只删除其他数组中不存在的键


remove only those keys that are not present in another array

我有两个阵列

$arr1 = array(
  'a' => array(some values here),
  'b' => array(some more values here),
  'c' => array(some more and more values here)
);

$arr2 = array('a','c');

您可以看到$arr2有2个值(a,c(

我想保留$arr1中那些值存在于$arr1(维护键值关联(中的键,并删除所有不在$arr2 中的其他值

因此,输出将是

$arr1 = array(
  'a' => array(some values here),
  'c' => array(some more and more values here)
);

我怎样才能做到这一点?

要重新表述一点,您需要找到两个数组中都存在的键,并保留第一个数组中的值。这恰好是array_intersect_key所做的:

$arr1 = array_intersect_key($arr1, $arr2)

注意:我不经常使用这个功能;您可能需要将第二个数组更改为类似

$arr2 = array('a' => 1, 'c' => 1);

以确保它们被视为键而非值。

结合欺骗的提示,你也可以做

$arr1 = array_intersect_key($arr1, array_flip($arr2))

这不需要更改第二个数组。