定義と使用方法
- PHPバージョン
- 4+
array_merge()関数は、
1つ以上の配列を順番に結合し、新しい配列を作成します。
この関数は、複数の配列を1つにまとめる必要がある場合に便利に使用できます。
特徴
- 複数の配列を任意の順序で結合することができます。
- 既存の配列は変更されず、結合結果を含む新しい配列が返されます。
- 各配列の要素は順番に連結されます。
基本の例
/* インデックス配列の結合 */
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
// 2つの配列を結合
$result = array_merge($array1, $array2);
print_r($result);
/*
出力:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)
*/
/* 連想配列の結合 */
$assoc_array1 = ['a' => 'red', 'b' => 'green'];
$assoc_array2 = ['c' => 'blue', 'd' => 'yellow'];
// 2つの配列を結合
$assoc_result = array_merge($assoc_array1, $assoc_array2);
print_r($assoc_result);
/*
出力:
Array
(
[a] => red
[b] => green
[c] => blue
[d] => yellow
)
*/
構文
array_merge(array array1, array2, array3, ...): array
引数
array1、array2、array3、...:結合したい1つ以上の配列です。この関数は1つ以上の配列を引数として受け取り、それらの配列を順番に結合して新しい配列を生成します。
戻り値
結合された配列を返します。引数が指定されていない場合は、空の配列を返します。
- 結合する配列が連想配列(文字列キーを持つ配列)の場合、同じ文字列キーが存在すると、後に指定された配列の値が前の配列の値を上書きします。
- 結合する配列が数値キー(インデックス配列)を持つ場合、値は上書きされず、結果の配列の末尾に追加されます。
- 結果の配列の数値キーは、0から始まる連続した整数キーに再構成されます。
変更履歴
| バージョン | 説明 |
|---|---|
| 7.4.0以降 | 引数を渡さなくても関数を呼び出せるようになりました。引数が指定されていない場合は空の配列を返します。ただし、nullを渡すとFatal errorが発生します。 |
| 7.4.0以前 | 関数を呼び出す際には、少なくとも1つ以上の配列を引数として渡す必要がありました。引数なしで呼び出す場合(またはnullを渡す場合)、PHPで警告(Warning)が発生しました。 |
$result = array_merge();
var_dump($result); // 出力: Warning: array_merge() expects at least 1 parameter...
$result = array_merge(null);
var_dump($result); // 出力: Warning: array_merge() expects at least 1 parameter...
$result = array_merge();
var_dump($result); // 出力: array(0) { }
$result = array_merge(null);
var_dump($result); // 出力: Fatal error: Uncaught TypeError:
重複要素の処理
array_merge()関数を正しく使用するためには、array_merge()関数が重複要素をどのように処理するかを理解する必要があります。重複するキーやインデックスがある場合にどのように動作するかを、例を通して確認しましょう。
- 文字列キーの重複処理
- 数値キー(インデックス)の重複処理
- 文字列キーと数値キーの重複処理
文字列キーの重複処理
結合する配列が同じ文字列キーを持っている場合、後に指定された配列の値が前の配列の値を上書きします。つまり、後に指定された値で置き換えられます。
$array1 = ['a' => 'apple', 'b' => 'banana'];
$array2 = ['b' => 'blueberry', 'c' => 'cherry'];
$result = array_merge($array1, $array2);
print_r($result);
/*
出力:
Array
(
[a] => apple
[b] => blueberry
[c] => cherry
)
*/
$array1と$array2には、重複する文字列キー'b'があります。array_merge()関数は、重複するキー'b'については、後に指定された配列である$array2の値('blueberry')で上書きします。
数値キー(インデックス)の重複処理
結合する配列が数値キー(インデックス)を持っている場合、後に指定された値は元の値を上書きせずに追加されます。数値キーの場合、上書きせずに新しいキーとともに値が追加されます。
$array1 = [0 => 'apple', 1 => 'banana'];
$array2 = [1 => 'blueberry', 2 => 'cherry'];
$result = array_merge($array1, $array2);
print_r($result);
/*
出力:
Array
(
[0] => apple
[1] => banana
[2] => blueberry
[3] => cherry
)
*/
$array1と$array2には、重複する数値キー'1'があります。array_merge()関数は、重複するキー'1'について、後に指定された配列である$array2の値('blueberry')を上書きせず、数値キーを増加させて新しいキー'3'として値を追加します。
文字列キーと数値キーの重複処理
$array1 = ['apple', 'banana', 'color' => 'red'];
$array2 = ['green', 'orange', 'color' => 'orange', 'shape' => 'circle'];
$result = array_merge($array1, $array2);
print_r($result);
/*
出力:
Array
(
[0] => apple
[1] => banana
[color] => orange
[2] => green
[3] => orange
[shape] => circle
)
*/
- 文字列キー
'color'の場合、$array2の値'orange'で上書きされます。 - 数値キー(インデックス)2と3の場合、
$array2の値'green'と'orange'が追加されます。
数値キーと文字列キーの重複処理は、array_merge()関数を理解する上で重要な要素の1つです。これを理解することで、結合後の配列の結果が予想通りかどうかを確認でき、データ構造を正しく維持するのに役立ちます。
多次元連想配列の結合
以下の例では、array_merge()関数を使用した多次元連想配列の結合例です。
// 1つ目の配列
$array1 = [
'name' => 'John Doe',
'age' => 30,
'address' => [
'street' => '123 Main Street',
'city' => 'Anytown',
'state' => 'CA'
]
];
// 2つ目の配列
$array2 = [
'phone' => '123-456-7890',
'email' => 'johndoe@example.com'
];
// 2つの配列を結合
$result = array_merge($array1, $array2);
// 結果を出力
print_r($result);
/*
出力:
Array
(
[name] => John Doe
[age] => 30
[address] => Array
(
[street] => 123 Main Street
[city] => Anytown
[state] => CA
)
[phone] => 123-456-7890
[email] => johndoe@example.com
)
*/
上記の例は、以下の点に注意して作成されています。
- 1つ目の配列と2つ目の配列のキーが重複しないように注意しました。
- 1つ目の配列の住所情報は、2つ目の配列の住所情報で上書きされないようにしました。
- 2つ目の配列の電話番号とメール情報は、1つ目の配列に追加されました。
この例を応用することで、さまざまな状況で多次元連想配列を結合することができます。