【PHP】array_cloumnで配列の整形
状況
DBから取ってきたデータ同士を上手く整形させて、配列を作り直したい。
一方の配列をidの集まりだとして、他方それに合うように整形したい場合。
foreachを使うと冗長になりがちな場合。例えば、片方でidリストを作成しておいて、もう片方でDBから取ってきた諸々のデータを比較する場合、それをforeachでやろうとすると入れ子にして冗長になる。breakを使い、意図した配列になったら抜けようとしても同じ感じ。array_columnを併用してforeachを1回にする。
array_cloumn
基本形
第一引数にDBから取得してきた配列を、第二引数に取得したいidを。
$hoge= [
['id' => 101,
'name' => 'John',
],
['id' => 288,
'name' => 'taro',
],
];
/*
var_dump(array_column($hoge, 'id'));
array(2) {
[0]=>
int(101)
[1]=>
int(288)
}*/
第三引数を使い、特定のkeyで並び替えた配列を作り直す
第二引数にnameを取り、第三引数にidを取ることで、idをkeyにして並び替えることができる。
$hoge= [
['id' => 101,
'name' => 'John',
],
['id' => 288,
'name' => 'taro',
],
];
/*
var_dump(array_column($hoge, 'name','id'));
array(2) {
[101]=>
string(4) "John"
[288]=>
string(4) "taro"
}*/
オブジェクトを扱う場合
Hogeクラスのhogehogeプロパティ’id’、’name’からそれぞれ取得する場合。
これも同様に、第三引数にidを持ってきてやれば、idをkeyにした配列を作り直せる。
<?php
class Hoge
{
public $hogehoge;
public function __construct(string $hogehoge,int $hoge_id)
{
$this->id = $hoge_id;
$this->name = $hogehoge;
}
}
$piyo = [
new Hoge('John',101),
new Hoge('taro',288),
new Hoge('hogeo',333),
];
/*
print_r(array_column($piyo, 'id'));
print_r(array_column($piyo, 'name','id'));
Array
(
[0] => 101
[1] => 288
[2] => 333
)
Array
(
[101] => John
[288] => taro
[333] => hogeo
)*/
これでkeyがid、valueがnameになった配列ができて、元々のDBから取ってくる配列をforeachで回してやり、idに適合するものを条件分岐させて配列を作り直せた。
以上
参照
・array_column
入力配列から単一のカラムの値を返す