モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

PHP の array_column() という便利関数を今さら知った

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