PHPの連想配列から一部を切り出す話
なんかこういう感じの連想配列から
<?php $array = [ "id" => 1, "name" => "NAME", "hoge" => "HOGEHOGE", "piyo" => "PIYOPIYO", "huga" => "HUGAHUGA", ... ];
任意のキーを指定して新しい連想配列に切り出したい
<?php // このキーの配列を元に $keys = ['id', 'name']; // こんな感じの新しい連想配列がほしい [ "id" => 1, "name" => "NAME", ]
ありがち実装
<?php $out = []; foreach($keys as $key) { $out[$key] = $array[$key]; } return $out;
かっこいい実装
<?php return array_intersect_key($array, array_flip($keys));
PHP: array_intersect_key - Manual
では逆に指定したキー以外の配列を切り出すにはどうすれば良いか?
=> array_diff_keys()
を使ってください。
<?php return array_diff_key($hash, array_flip($keys));
例えば、キーにidという文字列が含まれるものだけ抜き出したい、などの複雑な条件ではどうするか?
=> array_filter()
を使ってください。
ARRAY_FILTER_USE_KEYを第三引数に渡すとコールバックに連想配列のキーが渡ります。
<?php return array_filter($array, function($key) { return strpos($key, 'id') !== false; }, ARRAY_FILTER_USE_KEY);
用法
O/Rマッパーからブリブリと取得したN次元配列を程よいサイズのJSONに変換する時などに、foreachを死ぬほど入れ子にする代わりに使えるかもしれません。