PHP 5.5 から入ってた array_column という関数を知らなかった。便利やん。今月知った。
いうなれば、laravel collection や underscore.js の pluck に相当するやつ。PHP標準で入ってたんですね……
array_column の使い方
このような二次元の連想配列があったとき
<?php $records = [ [ 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ], [ 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ], [ 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ], [ 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ] ];
array_column()
を使い、第2引数にほしいキーを渡すと、こんな感じ
渡したキーの値だけを抜き出し、配列として返してくれる
$first_names = array_column($records, 'first_name'); print_r($first_names); Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
第3引数もある
第3引数にもキーを渡せまして、その場合、第3引数のフィールドをキーにした連想配列として返してくれる
$first_names = array_column($records, 'first_name', 'id'); print_r($first_names); Array ( [2135] => John [3245] => Sally [5342] => Jane [5623] => Peter )
これはよく使いそう。
別の使い方
第2引数を null にして第3引数を渡すと、第3引数をキーにした連想配列として、全体を返してくれる
$sorted = array_column($records, null, 'id'); print_r($sorted); Array ( [2135] => Array ( [id] => 2135 [first_name] => John [last_name] => Doe ) [3245] => Array ( [id] => 3245 [first_name] => Sally [last_name] => Smith ) // 以下略
これもよく使うケースだな〜
オブジェクトにも使える
PHP公式マニュアルによると
オブジェクトの配列を指定した場合は、public プロパティはそのまま取得できます。 protected や private なプロパティを取得したい場合は、そのクラスがマジックメソッド get() および isset() を実装している必要があります。
とのことで、連想配列だけでなくオブジェクトにも使える。(PHP 7.0以降)
知らんかった
symfony とか使ってて pluck ないのかな〜 とか調べてたんだけど、なんてことはない PHP 標準にあったのであった。知らんかった。