連想配列であとで要素を追加する

条件によって、連想配列のデータに共通部分、異なる部分があるとき。
以下の場合、Key1からKey4が共通で、$fooがtrueの時のみKey5,Key6も含めたい。

if($foo == true) {
    $array = [
        'Key11' => 'Value1',
        'Key12' => 'Value2',
        'Key13' => 'Value3',
        'Key14' => 'Value4',
        'Key15' => 'Value5',
        'Key16' => 'Value6',
    ];
} else {
    $array = [
        'Key11' => 'Value1',
        'Key12' => 'Value2',
        'Key13' => 'Value3',
        'Key14' => 'Value4',
    ];
}

そのとき、以下のように書いてしまうと、上書きされてしまう。

if($foo == true) {
    $array = [
        'Key15' => 'Value5',
        'Key16' => 'Value6',
    ];
}
$array = [
    'Key11' => 'Value1',
    'Key12' => 'Value2',
    'Key13' => 'Value3',
    'Key14' => 'Value4',
];
// $arrayのvar_dump出力結果
// array(4) {
//   ["Key11"]=>
//   string(6) "Value1"
//   ["Key12"]=>
//   string(6) "Value2"
//   ["Key13"]=>
//   string(6) "Value3"
//   ["Key14"]=>
//   string(6) "Value4"
// }

そこで、array_merge関数を使ってマージを行うことにより、上書きしないで追記ができる。
バージョン:5.6.28で確認。

if($foo == true) {
    $array = [
        'Key15' => 'Value5',
        'Key16' => 'Value6',
    ];
}
$array = array_merge($array, [
    'Key11' => 'Value1',
    'Key12' => 'Value2',
    'Key13' => 'Value3',
    'Key14' => 'Value4',
]);
// $arrayのvar_dump出力結果
// array(6) {
//   ["Key15"]=>
//   string(6) "Value5"
//   ["Key16"]=>
//   string(6) "Value6"
//   ["Key11"]=>
//   string(6) "Value1"
//   ["Key12"]=>
//   string(6) "Value2"
//   ["Key13"]=>
//   string(6) "Value3"
//   ["Key14"]=>
//   string(6) "Value4"
// }

コメント

タイトルとURLをコピーしました