LoginSignup
0
1

More than 1 year has passed since last update.

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

Posted at

はじめに

連想配列に要素を追加する実装をした際に、様々な方法があり混乱したのでまとめました。

対象者

この記事は下記のような人を対象にしています。

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

結論

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

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

【PHPで連想配列に要素を追加する方法1】キーを指定

最もオーソドックスな手法です。
要素を1つずつ追加する場合に使用すると良いでしょう。

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つずつ要素を追加したい時に使用します。

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関数は配列の要素の最後に配列を結合します。
複数の配列を結合したい時に使用します。

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] => ゲルググ
)

また、下記の特徴があります。

  • 数字のキーが重複する場合、前のインデックス番号の続きから連続した数値に置き換え
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] => ゲルググ
)
  • 文字列のキーが重複する場合、前の配列を後ろの配列が上書き
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関数と似ていますが、文字列のキーが重複する場合、値を上書きせず、同じ文字同士で新しい配列を作ります。
複数の配列を結合し、配列のキーごとにデータをまとめたい時に使用すると良いでしょう。

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関数と似ていますが、文字列のキーが重複する場合、後ろの配列を前の配列が上書きする点が異なります。
複数の配列を結合し、キーの重複がない要素だけ追加したい場合に使用すると良いでしょう。

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】連想配列を追加する方法

0
1
0

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
1