PHP

PHPのarray_columnが便利

More than 3 years have passed since last update.

PHP5.5で入ったarray_column()がとても便利だと言うことを@edvakf@githubに教えてもらった。

DBから取得したデータとか下のような形式になってることがよくある。

<?php

$rows = [
    0 => [ 'id' => 40, 'title' => 'dave', 'comment' => 'Hello, world!'],
    1 => [ 'id' => 10, 'title' => 'alice', 'comment' => '你好,世界!'],
    2 => [ 'id' => 30, 'title' => 'charlie', 'comment' => 'こんにちは、世界!' ],
    3 => [ 'id' => 20, 'title' => 'bob', 'comment' => 'Salve , per omnia saecula !' ],
];

こういう風に行毎にフィールドをキーにした連想配列になってるやつだ。DBから値を取得するとだいたいこんなかんじでとれる。こういうデータをarray_column()を使うと簡単に構造を変換できる。PHPすごい。

ある要素だけ取り出す

第1引数に配列、第2引数に取り出す要素のキー名を指定する。

<?php

$rows = [
    0 => [ 'id' => 40, 'title' => 'dave', 'comment' => 'Hello, world!'],
    1 => [ 'id' => 10, 'title' => 'alice', 'comment' => '你好,世界!'],
    2 => [ 'id' => 30, 'title' => 'charlie', 'comment' => 'こんにちは、世界!' ],
    3 => [ 'id' => 20, 'title' => 'bob', 'comment' => 'Salve , per omnia saecula !' ],
];

var_export(array_column($rows, 'id'));
// =>
// array (
//   0 => 40,
//   1 => 10,
//   2 => 30,
//   3 => 20,
// )

IDだけの配列が簡単に作れて便利。

あるフィールドをキー、あるフィールドを値にした連想配列にする

第3引数を指定にすると、その要素を結果の連想配列のキーにできる。

<?php

$rows = [
    0 => [ 'id' => 40, 'title' => 'dave', 'comment' => 'Hello, world!'],
    1 => [ 'id' => 10, 'title' => 'alice', 'comment' => '你好,世界!'],
    2 => [ 'id' => 30, 'title' => 'charlie', 'comment' => 'こんにちは、世界!' ],
    3 => [ 'id' => 20, 'title' => 'bob', 'comment' => 'Salve , per omnia saecula !' ],
];

var_export(array_column($rows, 'title', 'id'));
// =>
// array (
//   40 => 'dave',
//   10 => 'alice',
//   30 => 'charlie',
//   20 => 'bob',
// )

行を値にした連想配列にする

第2引数をnullにすると、行がそのままフィールドになる。

<?php

$rows = [
    0 => [ 'id' => 40, 'title' => 'dave', 'comment' => 'Hello, world!'],
    1 => [ 'id' => 10, 'title' => 'alice', 'comment' => '你好,世界!'],
    2 => [ 'id' => 30, 'title' => 'charlie', 'comment' => 'こんにちは、世界!' ],
    3 => [ 'id' => 20, 'title' => 'bob', 'comment' => 'Salve , per omnia saecula !' ],
];

var_export(array_column($rows, null, 'id'));
// =>
// array (
//   40 =>
//   array (
//     'id' => 40,
//     'title' => 'dave',
//     'comment' => 'Hello, world!',
//   ),
//   10 =>
//   array (
//     'id' => 10,
//     'title' => 'alice',
//     'comment' => '你好,世界!',
//   ),
//   30 =>
//   array (
//     'id' => 30,
//     'title' => 'charlie',
//     'comment' => 'こんにちは、世界!',
//   ),
//   20 =>
//   array (
//     'id' => 20,
//     'title' => 'bob',
//     'comment' => 'Salve , per omnia saecula !',
//   ),
// )

まだPHP5.5使ってないよ!

もうPHP5.6出てるんだから、はやく対応しろよ、っと言いつつ、Pure PHPの実装がある。