条件によって、連想配列のデータに共通部分、異なる部分があるとき。
以下の場合、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"
// }

コメント