array_filter на основе ключей из другого массива

У меня два массива:

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

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

Как я могу использовать array_filter для удаления элементов из $arr2 которые не существуют в $arr1 ? Как «c» в моем примере …

Solutions Collecting From Web of "array_filter на основе ключей из другого массива"

Для этой цели специально создана функция: 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); 

Используйте in_array в обратном вызове array_filter:

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

Обратите внимание, что это будет учитывать значения элементов, а не ключи. array_filter не даст вам каких-либо ключей для работы, поэтому, если это то, что вам нужно, регулярный цикл foreach может быть лучше подходит.

Чтобы пересечь массивы на основе ключей:

 array_intersect_key($arr1, $arr2); 

Обновить

К сожалению, нет решения array_filter можно пересечь на основе ключей массива 🙁