PHP 5.5 から入ってた array_column という関数を知らなかった。便利やん。今月知った。
いうなれば、laravel collection や underscore.js の pluck に相当するやつ。PHP標準で入ってたんですね……
www.php.net
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 標準にあったのであった。知らんかった。
関連
underscorejs.org
readouble.com