#やりたい事
ある配列の中から、特定のキーを持つ要素(複数)のみ抽出して新しい配列として取得したい。
array_column()
でやろうとしたが、単一のカラムの値しか取得できなかったので、array_filter
の中でin_array
を使って特定のキーを持っているか判定するようにした。
#コード
$baseArray
の中で$needleArray
のキーを持つ要素のみで構成される配列を作る。
$baseArray = [
'ゴミ処理' => 1500,
'コタツ(布団付き)' => 3000,
'電気グリル鍋' => 2000,
'大きな鍋' => 1000,
'カセットコンロ' => 1500,
'たこ焼き器' => 1500,
'大人数レイアウト' => 4000,
'寿司桶' => 500,
'プロジェクター' => 1500,
'深夜利用' => 5000,
'宿泊(1〜3名様)' => 6000,
'宿泊(4〜5名様)' => 8000,
'コテ' => 1000,
'撮影用ミニライト' => 1000,
'姿見鏡' => 1000,
'サプライズ装飾' => 4000,
'炊飯器' => 1500,
'トースター' => 1500,
'ミキサー' => 1000,
'付けない' => 0,
];
$needleArray = ['ゴミ処理','宿泊(1〜3名様)','電気グリル鍋'];
//ここから処理
$newArray = array_filter($baseArray,function($k) use ($needleArray) {
return in_array($k,$needleArray,true);
},ARRAY_FILTER_USE_KEY);
//追記 指摘がありました。こっちの方がスッキリしてる!
$newArray = array_intersect_key($baseArray, array_flip($needleArray));
#説明
###array_filter
・第1引数・・フィルタリングの対象になる配列
・第2引数
・・フィルタリング処理。第3引数にARRAY_FILTER_USE_KEY
を設定することで、クロージャの中で$baseArray
のキーを使えるようになります。キーはクロージャの引数に$k
で渡す。この処理でtrueの場合、該当する要素が結果の配列に格納される。
・第3引数・・オプション
###フィルタリング処理内容
第2引数の処理の中では、in_array
によって、$needleArray
の中に$k
が存在するかをチェックしている。存在する場合のみ該当要素が結果の配列に格納される。
以上。
参考
array_filter()
http://php.net/manual/ja/function.array-filter.php
in_array()
http://php.net/manual/ja/function.in-array.php