今回はPHPで配列を結合する方法をまとめました。
目次
配列を結合する方法
PHPでは下記の方法で配列の結合ができます。
array_merge
を使う
array_merge_recursive
を使う
+
演算子を使う
- 配列のアンパックを使う
array_merge を使う
複数の配列を結合する場合に array_merge が使えます。
結合する配列に重複するキーがある場合は、後に指定した配列の要素が優先されます。
$arr1 = ['a' => 11, 'b' => 22, 'c' => 33];
$arr2 = ['c' => 333, 'd' => 44];
$arr3 = array_merge($arr1, $arr2);
var_dump($arr3);
実行結果
array(4) {
["a"]=>
int(11)
["b"]=>
int(22)
["c"]=>
int(333)
["d"]=>
int(44)
}
数値がキーの要素
数値がキーの要素は全て別物として取り扱われ、新しい配列では数値キーが 0 から始まる連番に置き換えられます。
なお、数値キーの内容に意味がある場合は、array_mergeの使用は避けましょう。
$arr1 = [1, 2, 3];
$arr2 = [1, 2, 5];
$arr3 = array_merge($arr1, $arr2);
var_dump($arr3);
実行結果
array(6) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(1)
[4]=>
int(2)
[5]=>
int(5)
}
array_merge_recursive を使う
複数の配列を再起的に結合する場合に array_merge_recursive が使えます。
キーが重複していた場合は、値は無視されずにキーの値は配列にまとめられます。
$arr1 = [
'a' => 'orange',
'b' => 'red',
];
$arr2 = [
'b' => 'green',
'c' => 'white',
];
実行結果
array(3) {
["a"]=>
string(6) "orange"
["b"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["c"]=>
string(5) "white"
}
ネストした配列の場合もこの通り結合できます。
$arr1 = [
'a' => 'orange',
'b' => 'red',
'c' => [
'x' => 'blue',
'y' => 'gold',
],
];
$arr2 = [
'b' => 'green',
'c' => [
'y' => 'pink',
'z' => 'white',
],
];
$arr3 = array_merge_recursive($arr1, $arr2);
var_dump($arr3);
実行結果
array(3) {
["a"]=>
string(6) "orange"
["b"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["c"]=>
array(3) {
["x"]=>
string(4) "blue"
["y"]=>
array(2) {
[0]=>
string(4) "gold"
[1]=>
string(4) "pink"
}
["z"]=>
string(5) "white"
}
}
ネストした配列を結合処理は複雑になり見通しが悪くなりがちです。こういったケースでは事前に配列の構造を明確に定義しておくことが大切です。
+
演算子を使って配列を結合することもできます。
両方の配列に存在するキーは左側の配列要素が優先され、右側の配列にあった同じキーは無視されます。
キーを省略して定義した配列の結合
$arr1と同じインデックスを持つ、$arr2の要素は無視されています。要素番号を数えれば分かるものの、少し分かりづらいですね。
$arr1 = [1, 2];
$arr2 = [3, 4, 5, 6];
$arr3 = $arr1 + $arr2;
実行結果
array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(5)
[3]=>
int(6)
}
キーを指定して定義した配列の結合
このように明確にキーを指定した配列であれば、どの要素が結合されるのか明白ですね。
$arr1 = ['a' => 1, 'b' => 2, 'c' => 3];
$arr2 = ['c' => 333, 'd' => '99'];
$arr3 = $arr1 + $arr2;
var_dump($arr3);
実行結果
array(4) {
["a"]=>
int(1)
["b"]=>
int(2)
["c"]=>
int(3)
["d"]=>
string(2) "99"
}
配列のアンパックを使う
配列の前に ...
を付けると、配列の値を展開(アンパック)させることができます。PHP7.4以降で利用可能です。
$arr1 = [1, 2, 3];
$arr2 = [3, 4];
$arr3 = [...$arr1, ...$arr2];
var_dump($arr3);
実行結果
array(5) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(3)
[4]=>
int(4)
}
まとめ
PHPの配列結合の方法についてまとめてみました。
こうしてまとめてみると、PHPには色々なやり方がありますね。それぞれの特徴を覚えて、活用していきましょう。