У меня два массива:
$arr1 = array('a' => 10, 'b' => 20);
$arr2 = array('a' => 10, 'b' => 20, 'c' => 30);
Как я могу использовать array_filter для удаления элементов из $arr2
которые не существуют в $arr1
? Как «c» в моем примере …
Для этой цели специально создана функция: 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
можно пересечь на основе ключей массива 🙁