LoginSignup
0
0

アンパック(…演算子)とarray_merge()の違いがわからない

Last updated at Posted at 2023-06-28

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()は全く同じではない

多次元配列をフラットな状態へと結合したい場合、どちらかだけではうまくいきませんでした。
同じ挙動をするように見えても、要素の展開、要素の結合と、役割は違うようです。

最後に

誤り等があれば教えていただけると助かります!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0