PHPでArrayのSelectをする

RubyのHash#slice みたいなのをPHPでやりたかったのでメモ。

RubyのHash#sliceとは

ハッシュの中から指定したkey/valueを返します。

h = {id: 1, name: 'fwhy', address: 'Tokyo', job: nil}
h.slice(:name, :job)
# => {:name=>"fwhy", :job=>nil}

これをPHPでやりたいのです。

array_intersect_keyとarray_flipを使う

array_intersect_keyarray_flip を使うことで実現できます。

$a = ['id' => 1, 'name' => 'fwhy', 'address'=> 'Tokyo', 'job'=> null];  
array_intersect_key($a, array_flip(['name', 'job']));
// => ['name' => 'fwhy', 'job' => NULL]

ちなみに

Laravelならヘルパの Arr::only が使えます。

use Illuminate\Support\Arr;

$a = ['id' => 1, 'name' => 'fwhy', 'address'=> 'Tokyo', 'job'=> null];  
Arr::only($a, ['name', 'job']);
// => ['name' => 'fwhy', 'job' => NULL]