PHPの配列の値を展開できる...
演算子の使い方について書いています。
スプレッド演算子と呼ばれることもあります。
今回は...
演算子を使って、下記の挙動を確かめます。
・自作関数の引数に使って、可変引数を作る
・関数呼び出しの引数にして、呼び出しを簡略化する
載せているサンプルコードはPHPのバージョン8.1.8で確認しています。
それでは、確認していきましょう。
配列での…演算子の使い方は?
...
演算子は配列の前につけて使うことができます。
公式のドキュメントのこちらに記載があります。
配列の前につけて使用すると、演算子をつけた配列の内容を展開してくれます。
…演算子を使ってマージする
例えば、下記のように配列の内容を展開して、マージすることが可能です。
<?php
$fruits1 = ['orange', 'apple'];
$fruits2 = ['grape', 'banana'];
$fruits3 = ['lemon', 'peach'];
$fruits = [...$fruits1, ...$fruits2, ...$fruits3];
var_dump($fruits);
$fruits1, $fruits2, $fruits3という、文字列が2つずつの配列を作成しました。
それぞれの配列を...
演算子で展開して、$fruits配列を作成しています。
こうすると、1から3の配列の中身がすべて$fruitsに展開されます。
var_dump関数で出力して確認すると、下記のようにフラットな配列として、マージされました。
array(6) {
[0]=>
string(6) "orange"
[1]=>
string(5) "apple"
[2]=>
string(5) "grape"
[3]=>
string(6) "banana"
[4]=>
string(5) "lemon"
[5]=>
string(5) "peach"
}
…演算子を付けなかったらどうなる?
...
演算子を付けたことで、フラットな配列になりましたが、何もつけなかった場合には入れ子になります。
下記は、同じ配列を...
演算子を付けずに、ひとつの配列にしたものです。
$fruits = [$fruits1, $fruits2, $fruits3];
var_dump($fruits);
var_dump関数で出力すると、下記のように階層構造になりました。
array(3) {
[0]=>
array(2) {
[0]=>
string(6) "orange"
[1]=>
string(5) "apple"
}
[1]=>
array(2) {
[0]=>
string(5) "grape"
[1]=>
string(6) "banana"
}
[2]=>
array(2) {
[0]=>
string(5) "lemon"
[1]=>
string(5) "peach"
}
}
このように...
演算子を付けることで、配列の内容を展開できます。
array_merge関数とは違うのか?
配列のマージはarray_merge関数でも行うことができます。
先ほどのプログラムをarray_merge関数で行うと、下記のようになります。
<?php
$fruits1 = ['orange', 'apple'];
$fruits2 = ['grape', 'banana'];
$fruits3 = ['lemon', 'peach'];
$fruits = array_merge($fruits1, $fruits2, $fruits3);
var_dump($fruits);
$fruits1, $fruits2, $fruits3の配列をarray_merge関数でマージしています。
var_dump関数で出力すると、下記のようになります。
array(6) {
[0]=>
string(6) "orange"
[1]=>
string(5) "apple"
[2]=>
string(5) "grape"
[3]=>
string(6) "banana"
[4]=>
string(5) "lemon"
[5]=>
string(5) "peach"
}
このようにarray_merge関数でマージした場合も同じ挙動になります。
自作関数の引数で…演算子を使う
自作した関数の引数に...
演算子を使うことで、可変長の引数を作成することができます。
可変長は、渡す引数の数が決まっていないことです。
1つ渡してもいいし、3つや5つなど複数増やすこともできる引数です。
公式のドキュメントでは、このあたりに記載があります。
可変長引数のみを用意した関数
例えば、下記のように使うことで、引数が可変長になります。
function output(...$params) {
var_dump($params);
}
output("hello", "test", 123);
output関数を作って、渡す引数の$paramsが可変長です。
output関数を呼び出すときに、3つの引数を渡して呼び出しています。
var_dump関数で出力すると、下記のように、渡した引数が配列として受け取れていることが確認できました。
array(3) {
[0]=>
string(5) "hello"
[1]=>
string(4) "test"
[2]=>
int(123)
}
固定引数の後に、可変長引数を用意した関数
固定長の引数を書いた後に、可変長の引数を書くことができます。
function outputFruits($title, ...$fruits) {
echo "--- {$title} ---\n";
foreach($fruits as $fruit) {
echo "{$fruit}\n";
}
}
outputFruits("フルーツ出力", "orange", "banana", "apple");
outputFruits関数を作りました。
最初の引数は固定で$title変数で受け取ります。
第2引数には可変引数の$fruits変数を用意しました。
処理の内容は$title変数の文字列を最初に出力しています。
その後に可変長の引数で渡された、$fruitsをforeach文でループして、出力しています。
呼び出し時の最初の引数に「フルーツ出力」を渡して、その後にの「orange, banana, apple」を渡しています。
出力結果を確認すると、下記のようになります。
--- フルーツ出力 ---
orange
banana
apple
このように固定長の引数をいくつか定義した後に、可変長の引数を書くこともできます。
関数を呼び出すときに…演算子を使う
関数の呼び出し時に…演算子を使うこともできます。
例えば、下記のように使います。
function addThreeNumbers($num1, $num2, $num3) {
echo $num1 + $num2 + $num3;
}
$params = [10, 20];
addThreeNumbers(20, ...$params); // 50
addThreeNumbers関数を作成しました。
3つの引数の値を足して、表示するだけの関数です。
2つの数値を入れた$params配列を作りました。
その次の行で、addThreeNumbers関数を呼び出しています。
第1引数に20を渡して、第2・第3引数は$params配列を展開して渡しています。
このように配列の値を...
演算子を使うことで、引数に展開して渡すことも可能です。
結果、「50」が出力されて、ちゃんと渡った数字で計算されていることが確認できました。
コメント