【PHP8.x】array_merge関数の使い方

array_merge関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

array_merge関数は、一つまたは複数の配列を結合し、新しい配列を返す関数です。PHPにおいて、複数の配列をまとめて一つの配列として扱いたい場合に非常に役立ちます。

この関数は、引数として渡された配列を順番に処理し、それらの要素を新しい配列に結合します。もし、同じ文字列キーが複数の配列に存在する場合、後の配列の値が前の配列の値を上書きします。ただし、数値キーの場合は、重複したキーは上書きされず、新しいキーとして追加されます。この動作は、配列の結合において重要な考慮事項となります。

例えば、array_merge($array1, $array2)のように使用すると、$array1と$array2の要素が結合された新しい配列が返されます。引数の数は2つに限定されず、3つ以上の配列を結合することも可能です。

array_merge関数は、元の配列を変更することなく、新しい配列を作成して返すため、元の配列のデータを保持したい場合に適しています。これは、関数型プログラミングの原則にも合致しており、データの安全性を高めることができます。

この関数を使用する際には、キーの種類(文字列キーか数値キーか)によって結合結果が異なる点に注意が必要です。文字列キーの場合は上書き、数値キーの場合は追加というルールを理解しておくことで、意図しない結果を防ぐことができます。配列の結合処理を効率的に行うために、array_merge関数はPHPプログラミングにおいて不可欠な関数の一つと言えるでしょう。

構文(syntax)

1array_merge(array ...$arrays): array

引数(parameters)

...array ...$arrays

PHP:

  • ...array ...$arrays: マージしたい1つ以上の配列を指定します。可変長引数として、複数の配列をカンマ区切りで指定できます。

戻り値(return)

array

複数の配列を結合した新しい配列を返します。

サンプルコード

PHP array_mergeでの上書き挙動を理解する

1<?php
2
3/**
4 * array_merge の基本的な動作、特に同じ文字列キーを持つ要素がどのように上書きされるかを示すサンプルコードです。
5 * array_merge は、複数の配列を結合し、新しい配列を返します。
6 * 文字列キーが重複する場合、後から渡された配列の値が優先されます。
7 * 数値キーが重複する場合、数値キーは再インデックスされ、上書きは発生しません(追加されます)。
8 */
9
10// 最初の配列を定義します
11$array1 = [
12    'fruit' => 'apple',
13    'color' => 'red',
14    'id' => 101,
15    0 => 'first_element',
16];
17
18// 2番目の配列を定義します
19// 'fruit' と 'color' は $array1 にも存在します
20// 'animal' は新しいキーです
21// 0 (数値キー) は $array1 にも存在しますが、動作が異なります
22$array2 = [
23    'fruit' => 'orange',
24    'animal' => 'cat',
25    'color' => 'blue',
26    0 => 'second_element',
27    1 => 'another_element',
28];
29
30echo "--- 元の配列 ---" . PHP_EOL;
31echo "配列1: " . print_r($array1, true);
32echo "配列2: " . print_r($array2, true);
33
34// array_merge を使用して2つの配列を結合します
35// 同じ文字列キー ('fruit', 'color') は $array2 の値で上書きされます
36// 数値キー (0) は再インデックスされ、両方の値が含まれます
37$mergedArray = array_merge($array1, $array2);
38
39echo "--- array_merge 後の配列 ---" . PHP_EOL;
40echo "結合された配列: " . print_r($mergedArray, true);
41
42/*
43期待される出力例:
44--- 元の配列 ---
45配列1: Array
46(
47    [fruit] => apple
48    [color] => red
49    [id] => 101
50    [0] => first_element
51)
52配列2: Array
53(
54    [fruit] => orange
55    [animal] => cat
56    [color] => blue
57    [0] => second_element
58    [1] => another_element
59)
60--- array_merge 後の配列 ---
61結合された配列: Array
62(
63    [fruit] => orange    // $array2 の値で上書きされた
64    [color] => blue      // $array2 の値で上書きされた
65    [id] => 101
66    [0] => first_element // 数値キーは再インデックスされ、両方が含まれる
67    [1] => second_element// 数値キーは再インデックスされ、両方が含まれる
68    [animal] => cat
69    [2] => another_element
70)
71*/
72
73?>

array_merge関数は、PHPで複数の配列を結合し、新しい配列を生成するために使用されます。引数には結合したい配列をいくつでも指定でき、それらの配列の要素が結合された結果が新たな配列として戻り値で返されます。

この関数は、配列のキーの種類によって結合時の挙動が異なります。'fruit''color'のような文字列キーが複数の配列間で重複する場合、後から引数として渡された配列の値が優先され、前の配列の同じキーの値は上書きされます。たとえば、最初の配列に'fruit' => 'apple'があり、次の配列に'fruit' => 'orange'があれば、結合後の配列では'fruit' => 'orange'となります。

一方、01のような数値キーが重複しても、文字列キーのように上書きされることはありません。代わりに、数値キーは自動的にゼロから始まる形で再インデックス(振り直し)され、重複していた要素も含め、すべての数値キーを持つ要素が新しい配列に追加されます。サンプルコードでは、$array1$array2を結合する際、文字列キーの'fruit''color'$array2の値で上書きされ、数値キーの0は両方の要素が新しいインデックスで追加されていることが確認できます。このように、array_mergeは文字列キーの重複時には上書き、数値キーの重複時には追加と再インデックスを行う特性を持つため、データの結合時にはこの挙動を理解しておくことが重要です。

PHPのarray_merge関数は複数の配列を結合しますが、キーの種類によって挙動が異なりますので注意が必要です。同じ文字列キーが存在する場合、後から渡された配列の値が優先され、元の値は上書きされます。一方で、同じ数値キーが存在する場合は上書きされず、新しい数値インデックスが自動的に割り振られて、両方の値がすべて追加されます。この数値キーの挙動は、期待する結合結果と異なる場合がありますので、特に意識してください。array_mergeは元の配列を変更せず、結合された新しい配列を返しますので、その戻り値を使用するようにしてください。

PHP array_merge 同キーの挙動

1<?php
2
3/**
4 * array_merge() が同じキーを持つ配列をどのように処理するかを実演します。
5 */
6function demonstrateArrayMergeWithSameKeys(): void
7{
8    // --- 例1: キーが文字列の場合 ---
9
10    // 2つの配列を定義します。'color' という同じ文字列キーを持っています。
11    $array1 = ['color' => 'red', 'shape' => 'circle'];
12    $array2 = ['color' => 'blue', 'size' => 'small'];
13
14    // 配列をマージします。
15    // 同じ文字列キー ('color') が存在する場合、後から指定した配列の値 ('blue') で上書きされます。
16    $mergedWithStringKeys = array_merge($array1, $array2);
17
18    echo "■ 文字列キーが同じ場合:\n";
19    print_r($mergedWithStringKeys);
20    echo "\n";
21
22
23    // --- 例2: キーが数値の場合 ---
24
25    // 2つの配列を定義します。0 と 1 という同じ数値キーを持っています。
26    $array3 = [0 => 'apple', 1 => 'banana'];
27    $array4 = [0 => 'orange', 1 => 'grape'];
28
29    // 配列をマージします。
30    // 数値キーは上書きされず、キーが0から再採番(リインデックス)されて、値が末尾に追加されます。
31    $mergedWithNumericKeys = array_merge($array3, $array4);
32
33    echo "■ 数値キーが同じ場合:\n";
34    print_r($mergedWithNumericKeys);
35}
36
37// 関数を実行して結果を表示します。
38demonstrateArrayMergeWithSameKeys();
39
40?>

PHPのarray_merge関数は、引数として渡された1つ以上の配列を結合し、1つの新しい配列として返すための関数です。この関数は、結合する配列に同じキーが存在する場合、そのキーが文字列か数値かによって挙動が異なります。

サンプルコードの例1のように、キーが文字列の場合(例: 'color')、後から渡された配列の値が優先され、前の値は上書きされます。このため、'red'は'blue'で上書きされた結果となります。

一方、例2のようにキーが数値の場合、値は上書きされません。後から渡された配列の要素はそのまま末尾に追加され、新しい配列全体のキーが0から始まる連続した数値に振り直されます。これをリインデックスと呼びます。そのため、結果は['apple', 'banana', 'orange', 'grape']という4つの要素を持つ配列になります。このように、array_mergeはキーの種類によって処理方法が変わるという特徴を理解しておくことが重要です。

array_merge関数は、配列のキーが文字列か数値かによって動作が大きく異なります。同じ文字列キーが存在する場合、後から指定した配列の値で上書きされるため、意図しないデータの消失に注意が必要です。一方、数値キーの場合は上書きされず、値が末尾に追加されてキーが0から再採番されます。このため、元のキー情報を保持したい場合には適していません。もし数値キーを維持したまま値を上書きしたい場合は、array_mergeではなく+演算子(配列の和集合)の使用を検討してください。この挙動の違いを理解することが、予期せぬ不具合を防ぐ鍵となります。

PHP array_mergeで連想配列を結合する

1<?php
2
3/**
4 * PHPのarray_merge関数を使って連想配列を結合するサンプルコード。
5 *
6 * array_merge関数は、複数の配列を結合し、新しい配列を返します。
7 * 連想配列の場合、同じ文字列キーを持つ要素が複数の配列に存在すると、
8 * 後から結合される配列の値が、前の配列の同じキーの値を上書きします。
9 * 数値キーを持つ要素は、キーが再インデックス(0から振り直し)されますが、
10 * この例では連想配列の挙動に焦点を当てています。
11 */
12function mergeAssociativeArraysExample(): void
13{
14    // 最初の連想配列を定義
15    $userProfile1 = [
16        'id' => 101,
17        'name' => 'Alice',
18        'email' => 'alice@example.com',
19    ];
20
21    // 2番目の連想配列を定義
22    // 'id' と 'name' キーが重複しており、値が異なる
23    $userProfile2 = [
24        'id' => 102,
25        'name' => 'Bob',
26        'phone' => '090-XXXX-XXXX',
27    ];
28
29    echo "--- 元の連想配列1 ---\n";
30    print_r($userProfile1);
31
32    echo "\n--- 元の連想配列2 ---\n";
33    print_r($userProfile2);
34
35    // array_merge 関数で2つの連想配列を結合
36    // 'id' と 'name' は $userProfile2 の値で上書きされる
37    $mergedProfile = array_merge($userProfile1, $userProfile2);
38
39    echo "\n--- array_merge で結合した結果(重複キーは上書き)---\n";
40    print_r($mergedProfile);
41    /*
42     * 出力結果の解説:
43     * - 'id' は $userProfile2 の '102' で上書きされます。
44     * - 'name' は $userProfile2 の 'Bob' で上書きされます。
45     * - 'email' は $userProfile1 から引き継がれます。
46     * - 'phone' は $userProfile2 から追加されます。
47     */
48
49    // 別の連想配列を追加して、さらに結合する例
50    $userAddress = [
51        'email' => 'alice.smith@example.com', // 'email' キーが重複し、さらに上書き
52        'address' => 'Tokyo, Japan',
53    ];
54
55    echo "\n--- 追加する連想配列3 ---\n";
56    print_r($userAddress);
57
58    // 3つの連想配列を一度に結合
59    // 重複するキーは、引数で最も最後に指定された配列の値で上書きされます
60    $finalProfile = array_merge($userProfile1, $userProfile2, $userAddress);
61
62    echo "\n--- 複数の配列を array_merge で結合した最終結果 ---\n";
63    print_r($finalProfile);
64    /*
65     * 出力結果の解説:
66     * - 'id': 102 ($userProfile2から)
67     * - 'name': 'Bob' ($userProfile2から)
68     * - 'email': 'alice.smith@example.com' ($userAddressから、元のalice@example.comを上書き)
69     * - 'phone': '090-XXXX-XXXX' ($userProfile2から)
70     * - 'address': 'Tokyo, Japan' ($userAddressから)
71     */
72}
73
74// 定義した関数を実行
75mergeAssociativeArraysExample();

PHPのarray_merge関数は、引数として渡された複数の配列を一つに結合し、新しい配列として返す関数です。元の配列が変更されることはありません。

この関数を連想配列(文字列のキーを持つ配列)で使用する場合、キーの扱いに重要な特徴があります。複数の配列に同じ文字列のキーが存在した場合、後から渡された配列の値が、先に渡された配列の同じキーの値を上書きします。サンプルコードの最初の例では、$userProfile1$userProfile2を結合する際に、両方に存在するキー'id''name'の値が、後者の$userProfile2の値で置き換えられています。

また、array_mergeには3つ以上の配列を一度に指定することも可能です。その場合もルールは同じで、キーが重複した際は、引数の最も右側(最後)に指定された配列の値が最終的に採用されます。この性質を利用することで、デフォルト設定を個別の設定で上書きするような処理を簡単に行うことができます。

array_merge関数で連想配列を結合する際、同じキーが存在すると引数の後方にある配列の値で上書きされる点に注意が必要です。引数の順番が結果を大きく左右します。また、数値キーの配列を結合した場合はキーが0から振り直され、値が末尾に追加される動きになり、文字列キーの時とは挙動が異なります。配列の結合には+演算子もありますが、こちらは先に指定した配列のキーが優先される(上書きされない)ため、用途に応じて使い分けることが重要です。この関数は元の配列を変更せず、結合結果を新しい配列として返すことも覚えておきましょう。

関連コンテンツ