PHPのバージョン
PHP 7.4 以降のバージョンが対象となります。
アンパック(…演算子)とarray_merge()は同じなのか
配列を結合したい場合、array_merge()以外にも『...演算子』を使う方法があります。(下記参照)
<?php
$array1 = [1, 2];
$array2 = [3, 4];
$unpack = [...$array1, ...$array2];
var_export($unpack);
/* 出力結果
array (
0 => 1,
1 => 2,
2 => 3,
3 => 4,
)
*/
それでは、多次元配列の場合はどうでしょうか。
<?php
$array1 = [
[1, 2],
[3, 4],
];
$array2 = [
[5, 6],
[7, 8],
];
$unpack = [...$array1, ...$array2];
var_export($unpack);
// 出力結果はどうなる?
例を出して比べてみよう
Q1
<?php
$array1 = [
[1, 2],
[3, 4],
];
$array2 = [
[5, 6],
[7, 8],
];
$unpack = [...$array1, ...$array2];
var_export($unpack);
出力結果
array(
0 =>
array(
0 => 1,
1 => 2,
),
1 =>
array(
0 => 3,
1 => 4,
),
2 =>
array(
0 => 5,
1 => 6,
),
3 =>
array(
0 => 7,
1 => 8,
),
)
配列をアンパック(展開)していますが、多次元配列の状態は保っています。
Q2
<?php
$array1 = [
[1, 2],
[3, 4],
];
$array2 = [
[5, 6],
[7, 8],
];
$merged = array_merge($array1, $array2);
var_export($merged);
出力結果
array (
0 =>
array (
0 => 1,
1 => 2,
),
1 =>
array (
0 => 3,
1 => 4,
),
2 =>
array (
0 => 5,
1 => 6,
),
3 =>
array (
0 => 7,
1 => 8,
),
)
配列を結合しています。Q1と同じ出力結果になりましたね。
Q3
<?php
$array1 = [
[1, 2],
[3, 4],
];
$array2 = [
[5, 6],
[7, 8],
];
$flattened = array_merge(...$array1, ...$array2);
var_export($flattened);
出力結果
array (
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
5 => 6,
6 => 7,
7 => 8,
)
配列をアンパック(展開)したうえで結合しています。フラットな状態になりました。
アンパック(…演算子)
- 配列の要素を個別の引数として展開する役割を果たす。
配列の結合 array_merge()
- ひとつまたは複数の配列の要素を結合し、得られた配列を返す。
- array_merge()のほう関数の処理分だけ時間かかる。
アンパック(…演算子)とarray_merge()は全く同じではない
多次元配列をフラットな状態へと結合したい場合、どちらかだけではうまくいきませんでした。
同じ挙動をするように見えても、要素の展開、要素の結合と、役割は違うようです。
最後に
誤り等があれば教えていただけると助かります!