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

作成日: 更新日:

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

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

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

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

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

基本的な使い方

構文(syntax)

array_merge(array ...$arrays): array

引数(parameters)

...array ...$arrays

PHP:

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

戻り値(return)

array

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

サンプルコード

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

<?php

/**
 * array_merge の基本的な動作、特に同じ文字列キーを持つ要素がどのように上書きされるかを示すサンプルコードです。
 * array_merge は、複数の配列を結合し、新しい配列を返します。
 * 文字列キーが重複する場合、後から渡された配列の値が優先されます。
 * 数値キーが重複する場合、数値キーは再インデックスされ、上書きは発生しません(追加されます)。
 */

// 最初の配列を定義します
$array1 = [
    'fruit' => 'apple',
    'color' => 'red',
    'id' => 101,
    0 => 'first_element',
];

// 2番目の配列を定義します
// 'fruit' と 'color' は $array1 にも存在します
// 'animal' は新しいキーです
// 0 (数値キー) は $array1 にも存在しますが、動作が異なります
$array2 = [
    'fruit' => 'orange',
    'animal' => 'cat',
    'color' => 'blue',
    0 => 'second_element',
    1 => 'another_element',
];

echo "--- 元の配列 ---" . PHP_EOL;
echo "配列1: " . print_r($array1, true);
echo "配列2: " . print_r($array2, true);

// array_merge を使用して2つの配列を結合します
// 同じ文字列キー ('fruit', 'color') は $array2 の値で上書きされます
// 数値キー (0) は再インデックスされ、両方の値が含まれます
$mergedArray = array_merge($array1, $array2);

echo "--- array_merge 後の配列 ---" . PHP_EOL;
echo "結合された配列: " . print_r($mergedArray, true);

/*
期待される出力例:
--- 元の配列 ---
配列1: Array
(
    [fruit] => apple
    [color] => red
    [id] => 101
    [0] => first_element
)
配列2: Array
(
    [fruit] => orange
    [animal] => cat
    [color] => blue
    [0] => second_element
    [1] => another_element
)
--- array_merge 後の配列 ---
結合された配列: Array
(
    [fruit] => orange    // $array2 の値で上書きされた
    [color] => blue      // $array2 の値で上書きされた
    [id] => 101
    [0] => first_element // 数値キーは再インデックスされ、両方が含まれる
    [1] => second_element// 数値キーは再インデックスされ、両方が含まれる
    [animal] => cat
    [2] => another_element
)
*/

?>

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は元の配列を変更せず、結合された新しい配列を返しますので、その戻り値を使用するようにしてください。

【PHP8.x】array_merge関数の使い方 | いっしー@Webエンジニア