0
3

More than 1 year has passed since last update.

PHP 連想配列で同じキーの要素をまとめる 要素が配列の連想配列

Posted at

やりたいこと

以下のような連想配列を持つ多次元配列がある。
データベースからデータを取ってきたときによく見る形ではないだろうか。

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でも(定義しなくても?)要素を追加できるところでしょうか。

よければ、別解などご意見いただけると幸いです。

0
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3