ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

PHP8.1, アンパックがarray_merge()とまったく同じものになる。

php
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

配列のマージには、array_merge() 以外に、'...' を使った方法もあります。

それは数値の配列キーにしか対応してなかったんですが、PHP8.1から文字列のキーも使えるようになりました。

この配列のマージのことを『配列のアンパック』と言います。また一般的にはスプレッド構文・スプレッド演算子と呼ばれる。

配列のアンパックの基本については、PHP7.4のところで触れたのでここでは割愛します。

PHP7.4からPHP8.0までは、連想配列のキーが文字列のときPHPエラーが発生していました。

$org = ['a' => '1st', 'b' => '2nd', 'c' => '3rd'];
$new = ['d' => '4th', 'e' => '5th', 'f' => '6th'];

$unpack = [...$org, ...$new];
var_dump($unpack);
PHP8.0の実行結果
PHP Fatal error:  Uncaught Error: Cannot unpack array with string keys in /home/vagrant/php-test.php:4
Stack trace:
#0 {main}
  thrown in /home/vagrant/php-test.php on line 4

これがPHP8.1ではarray_merg()と同じ結果になります。

PHP8.1の実行結果
array(6) {
  ["a"]=>
  string(3) "1st"
  ["b"]=>
  string(3) "2nd"
  ["c"]=>
  string(3) "3rd"
  ["d"]=>
  string(3) "4th"
  ["e"]=>
  string(3) "5th"
  ["f"]=>
  string(3) "6th"
}

配列のキーが被ったときどうなるか見てみましょう。

$org = ['a' => '1st', 'b' => '2nd', 'c' => '3rd'];
$new = ['c' => '4th', 'd' => '5th', 'e' => '6th'];

$unpack = [...$org, ...$new];
var_dump($unpack);
array(5) {
  ["a"]=>
  string(3) "1st"
  ["b"]=>
  string(3) "2nd"
  ["c"]=>
  string(3) "4th"
  ["d"]=>
  string(3) "5th"
  ["e"]=>
  string(3) "6th"
}

キーが被ったときはあとから追加されたもので上書きされます。

変更点のあるものだけを変えるのがマージというので当然のこと。もちろん、array_merge() も同じ結果になります。

PHP8.1以降、array_merge() とアンパックは全く同じ機能

PHP8.1で変更点が加えられたことで、アンパックとarray_merge() の処理でできることは全く同じになりました。

これでarray_merge()はお役御免なんじゃないだろうか。

個人的にはアンパックだけでいいと思う。コードの見た目もマージしてますって感じだし。

じつはPHP8.1のarray_merge()の中身って、アンパック1行だけかもしれない。パラメータうんぬんの処理を除くと。

前の投稿
PHP8.1, 読み取り専用のプロパティ追加。一度値を代入すると上書きできない。
PHP8.1, never型, PHPプログラムが終了することを示す。
次の投稿

コメントを残す