やりたいこと
以下のような連想配列を持つ多次元配列がある。
データベースからデータを取ってきたときによく見る形ではないだろうか。
input.php
$array = [
['key1'=>'aa','key2'=>'b','code'=>'c'],
['key1'=>'a','key2'=>'b','code'=>'d'],
['key1'=>'aa','key2'=>'bb','code'=>'e'],
['key1'=>'a','key2'=>'bb','code'=>'f'],
['key1'=>'aa','key2'=>'bb','code'=>'g'],
];
この配列をkeyが同じものでまとめて、配列にしたい。
result.php
Array
(
[aa] => Array
(
[b] => Array
(
[0] => c
)
[bb] => Array
(
[0] => e
[1] => g
)
)
[a] => Array
(
[b] => Array
(
[0] => d
)
[bb] => Array
(
[0] => f
)
)
)
以前に以下の記事を書いた。
・js 連想配列(オブジェクト)で同じキーの要素をまとめる 配列を持つプロパティ
これを書いたのはPHPでこの処理を書いたときに、jsの場合はどう書くのか気になったからである。
やったこと
index.php
foreach($array as $data){
if(!$newArr[$data['key1']][$data['key2']]){
$newArr[$data['key1']][$data['key2']]=[$data['code']];
}else{
array_push($newArr[$data['key1']][$data['key2']],$data['code']);
}
};
echo('<pre>');
print_r($newArr);
echo('</pre>');
jsより簡単だと思うのは、undefindでも(定義しなくても?)要素を追加できるところでしょうか。
よければ、別解などご意見いただけると幸いです。