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