DBから取った配列をPHPで1行変換
PHPでデータベースから配列を取ってくると、使いづらい形になっていることがよくあります。ものによっては、1行で思い通りの変換ができるので、使いこなせると快感です。
その1…ただの配列でいいのに
DBから1列だけ取ってくると、こんな配列になっていることがよくあります。
$arr1 = [
['column' => 'foo'],
['column' => 'bar'],
['column' => 'baz']
];
このまま使うには明らかに不便ですし、「ただの配列にしたい」ということはよくあるかと思います。普通に書けばforeach
で回してどうのこうのとなるかと思いますが、実は1行で片付きます。
$simple_arr1 = array_map('reset', $arr1);
array_map
は、配列の各要素に同じ関数を適用する関数なのですが、指定しているreset
はあまり見慣れないかもしれません。説明を読んでもわかりにくいかもしれませんが、返り値としては「配列の先頭の値」を返す関数なので、mapした結果は「先頭要素だけ抜き出した配列」になって、['foo', 'bar', 'baz']
という、単なる配列ができ上がります。
その2…ただの配列には興味ありません
逆に、複数項目をDBから取ってきても、返り値はたいてい単なる配列となっています。
$arr2 = [
['id' => '1', 'family' => 'Suzumiya', 'name' => 'Haruhi'],
['id' => '2', 'family' => 'Nagato', 'name' => 'Yuki'],
['id' => '3', 'family' => 'Asahina', 'name' => 'Mikuru'],
['id' => '4', 'family' => 'Koizumi', 'name' => 'Itsuki'],
];
特に、キーが1から連続するようなマスターをこのような形で取ってくると、「1個ずれたまま参照してしまって、最後のをアクセスしようとしない限り気づかない」というような、複雑なバグすら起こしかねませんので、使いやすいようにid
をキーにした連想配列にしておきたいものです。
PHP 5.5からは、このような場合に便利なarray_column
関数が登場しています。
$assoc_arr2 = array_column($arr2, NULL, 'id');
なお、その1のほうもarray_column
で、$simple_arr1 = array_map($arr1, 'column');
のように書けます。
Author And Source
この問題について(DBから取った配列をPHPで1行変換), 我々は、より多くの情報をここで見つけました https://qiita.com/jkr_2255/items/e20d6cb230bf75c8eae3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .