Я тоже всегда этого хочу. Как PHP-версия Underscore pick .
Это уродливо и нелогично, но иногда я делаю вот что (я думаю, это может быть то, к чему стремился prodigitalon):
$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo'];
// Extract foo and zoo but not zam
print_r(array_intersect_key($a, array_flip(['foo', 'zoo'])));
/*
Array
(
[foo] => bar
[zoo] => doo
)
*/
array_intersect_key возвращает все элементы первого аргумента, ключи которого присутствуют во втором аргументе (и все последующие аргументы, если таковые имеются). Но, поскольку он сравнивает ключи с ключами, я использую array_flip для удобства. Я мог бы также использовать ['foo' => null, 'zoo' => null]
, но это даже ужаснее.