PHPのarray_merge/array_merge_recursiveなど、連想配列に要素を追加する方法を解説 

## はじめに
連想配列に要素を追加する実装をした際に、様々な方法があり混乱したのでまとめました。
## 対象者
この記事は下記のような人を対象にしています。

- 駆け出しエンジニア
- プログラミング初学者
- 「連想配列に要素を追加する方法はいくつか知ってるけど、どうやって使い分けるのかわからない」という人

## 結論
下記の5つの方法があるので、目的別に使い分けましょう！

| No |    内容     |    備考    |
|---:|-------------|------------|
| 1  |キーを指定|要素を1つずつ追加する場合|
| 2  |キーを指定しない|キーを指定する必要がなく、要素を1つずつ追加する場合|
| 3  |array_merge関数|複数の配列を結合する場合|
| 4  |array_merge_recursive関数|複数の配列を結合し、キーごとにデータをまとめたい場合|
| 5  |プラス(+)演算子|複数の配列を結合し、キーの重複がない要素だけ追加したい場合|

## 【PHPで連想配列に要素を追加する方法1】キーを指定
最もオーソドックスな手法です。
**要素を1つずつ追加する場合**に使用すると良いでしょう。

```php:example.php
$gundam = array(
	'name'   => 'ガンダム',
	'code'   => 'RX-78-2',
	'height' => '18.0 m'
	);

// キーを指定して要素を追加
$gundam['weight'] = '43.4 t';
print_r($gundam);

// 結果
Array
(
    [name] => ガンダム
    [code] => RX-78-2
    [height] => 18.0 m
    [weight] => 43.4 t
)
```

## 【PHPで連想配列に要素を追加する方法2】キーを指定しない
その1と似ていますが、キーを指定しなくても連想配列に要素を追加することはできます。
通常の配列と同じ手法ですね。
キーは指定していないので、追加した順番に0から連番で付番されます。
**キーを指定する必要がなく、1つずつ要素を追加したい時**に使用します。

```php:example.php
$gundam = array(
	'name'   => 'ガンダム',
	'code'   => 'RX-78-2',
	'height' => '18.0 m'
	);

// キーを指定しない場合(普通の配列と同じ)
$gundam[] = '1380 kw';
$gundam[] = '55500 kg';
print_r($gundam);

// 結果
Array
(
    [name] => ガンダム
    [code] => RX-78-2
    [height] => 18.0 m
    [0] => 1380 kw
    [1] => 55500 kg
)
```

## 【PHPで連想配列に要素を追加する方法3】array_merge関数
array_merge関数は配列の要素の最後に配列を結合します。
複数の配列を結合したい時に使用します。

```php:example.php
$zeon1 = [
    0 => 'シャア専用ザク',
    1 => 'ヅダ',
    2 => 'ギャン'
];
$zeon2 = [
    3 => 'ジオング',
    4 => 'ザクI',
    5 => 'ゲルググ'
];
// 配列を結合
$zeons = array_merge($zeon1, $zeon2);
print_r($zeons);

// 結果
Array
(
    [0] => シャア専用ザク
    [1] => ヅダ
    [2] => ギャン
    [3] => ジオング
    [4] => ザクI
    [5] => ゲルググ
)
```
また、下記の特徴があります。

- 数字のキーが重複する場合、前のインデックス番号の続きから連続した数値に置き換え

```php:example.php
$zeon1 = [
    0 => 'シャア専用ザク',
    1 => 'ヅダ',
    2 => 'ギャン'
];
$zeon2 = [
    0 => 'ジオング',
    1 => 'ザクI',
    2 => 'ゲルググ'
];
// 配列を結合
$zeons = array_merge($zeon1, $zeon2);
print_r($zeons);

// 結果
Array
(
    [0] => シャア専用ザク
    [1] => ヅダ
    [2] => ギャン
    [3] => ジオング
    [4] => ザクI
    [5] => ゲルググ
)
```

- 文字列のキーが重複する場合、前の配列を**後ろの配列が上書き**

```php:example.php
$zeon1 = [
    'char'            => 'シャア専用ザク',
    'massProduction1' => 'ヅダ',
    'massProduction2' => 'ギャン'
];
$zeon2 = [
    'char'            => 'ジオング',
    'massProduction1' => 'ザクI',
    'massProduction2' => 'ゲルググ'
];
$zeons = array_merge($zeon1, $zeon2);
print_r($zeons); 

// 結果
Array
(
    [char] => ジオング
    [massProduction1] => ザクI
    [massProduction2] => ゲルググ
)
```

## 【PHPで連想配列に要素を追加する方法4】array_merge_recursive関数

array_merge関数と似ていますが、文字列のキーが重複する場合、値を上書きせず、同じ文字同士で新しい配列を作ります。
**複数の配列を結合し、配列のキーごとにデータをまとめたい時**に使用すると良いでしょう。

```php:example.php
$gundam = array(
    'name'   => 'ガンダム',
    'code'   => 'RX-78-2',
    'height' => '18.0 m',
    'pilot'  => 'アムロ・レイ'
);
$gm = array(
    'name'   => 'ジム',
    'code'   => 'RGM-79',
    'height' => '18.0 m'
);
$esfs = array_merge_recursive($gundam, $gm);
print_r($esfs); 

// 結果
Array
(
    [name] => Array
        (
            [0] => ガンダム
            [1] => ジム
        )

    [code] => Array
        (
            [0] => RX-78-2
            [1] => RGM-79
        )

    [height] => Array
        (
            [0] => 18.0 m
            [1] => 18.0 m
        )

    [pilot] => アムロ・レイ
)
```

## 【PHPで連想配列に要素を追加する方法5】プラス(+)演算子
array_merge関数と似ていますが、文字列のキーが重複する場合、後ろの配列を**前の配列が上書き**する点が異なります。
**複数の配列を結合し、キーの重複がない要素だけ追加したい場合**に使用すると良いでしょう。

```php:example.php
$CharTeam = [
    'leader' => 'シャア',
    'member1' => 'デニム',
    'member2' => 'ジーン',
];
$additionalMembers = [
    'leader'  => 'ガデム',
    'member3' => 'クラウン',
];
$newCharTeam = $CharTeam + $additionalMembers;
print_r($newCharTeam); 

// 結果
Array
(
    [leader] => シャア
    [member1] => デニム
    [member2] => ジーン
    [member3] => クラウン
)
```

## おわりに
PHPで連想配列に要素を追加する方法(array_merge/array_merge_recursiveなど)についてまとめました。
まとめることでそれぞれの手法の特徴が理解できました！

## 参考記事
[【PHP】連想配列を追加する方法](https://it-kyujin.jp/article/detail/1338/)