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の実装がある。