アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < イザユケエンジニャー

配列に要素がなければ追加、あれば何もしない

例えば以下2つの配列があるとします。

$list_1 = array(
    'hoge' => 1,
    'fuga' => 2,
);
$list_2 = array(
    'fuga' => 20,
    'piyo' => 30,
);

これについて、以下操作をしたい場合。

  • $list_1になくて$list_2にあるキーに対する要素を$list_1に追加する
  • $list_1にあって$list_2にもあるキーに対する要素については(値が違っても)何もしない
  • $list_1にあって$list_2にないキーに対する要素については何もしない

要するに$list_1を以下の状態にしたい場合ですね。

array(
    'hoge' =>  1,
    'fuga' =>  2,
    'piyo' => 30,
);

なんと以下の1行でOK。

$list_1 += $list_2;

ちなみに以下の状態にしたい場合(同じキーで$list_2にある場合は更新したい場合)はarray_mergeでOK。

array(
    'hoge' =>  1,
    'fuga' =>  2,
    'piyo' => 30,
);
$list_1 = array_merge(list_1, $list_2);

いや待てよ、それなら

$list_1 = $list_2 + $list_1;

で結果的に同じになるんじゃないか?
(要素の順番は変わるけども)

簡単な連想配列なら別にどっちでもいいかも?
連想配列でない場合はarray_mergeだとキーが振りなおされたりするので使い分けが必要だけども…

気が向いたらまとめなおします。

参考
PHPで連想配列にkeyが存在したら値を追加しない、存在しなければ値を追加する、の書き方 - こんにちはこんにちはmonmonです!
PHP: array_merge - Manual