PHPのlist関数の使い方!配列の値を変数に展開する!

PHP

PHPのlist関数を使い方について書いています。
その後に動作確認のために、いくつかコードを書いてみました。

載せているサンプルコードについては、PHPのバージョン8.1.8を使って検証しています。

list関数の使い方

list関数を使うことで、配列の値を一括して、変数に展開することが可能です。
例えば、下記のように使うことができます。

<?php
$fruits = ['りんご', 'オレンジ', 'ぶどう'];

list($apple, $orange, $grape) = $fruits;
echo "{$apple}と{$orange}と{$grape}があります。"; // りんごとオレンジとぶどうがあります。

最初に$fruits配列を作っています。
果物の名前を3つ格納している配列です。

次の処理でlist関数を使って、配列の内容を変数に展開しています。
list関数の引数には、配列の内容を展開するための変数を書きます。

代入演算子の右側には配列を指定しています。
これで$fruits配列の値が、list関数に並べた変数にそれぞれ展開されます。

最後にechoで出力することで、並べた変数に値が展開され、代入されているか確認しています。
出力結果は「りんごとオレンジとぶどうがあります。」になりました。
list関数に並べた、それぞれの変数に値が入りました。

引数と戻り値について

引数と戻り値についてです。

引数

引数は、配列の値が展開される変数を設定しました。
左から順番に配列の0番目からの値が設定されます。

先ほどのサンプルコードの例だと$appleに0番目の値、$orangeに1番目の値、$grapeに2番目の値といった形です。

list($apple, $orange, $grape) = $fruits;

戻り値

代入した配列がそのまま返ってきます。
例えば、下記のようにすると$resultの値は$fruitsと同じになります。

$result = list($apple, $orange, $grape) = $fruits;

list関数を使ったサンプルコード4つ

list関数を使って、4つのパターンで挙動を確認してみました。

配列の中の配列を展開する

配列の中に配列があった場合にも、list関数を使うことで変数に一括で展開することができます。

<?php
$userNames = ['太郎', ['次郎', '三郎'], '花子'];

list($taro, list($jiro, $saburo), $hanako) = $userNames;
echo "{$taro} / {$jiro} / {$saburo} / {$hanako}"; // 太郎 / 次郎 / 三郎 / 花子

$userNames配列に名前を4つ入れていますが、真ん中の2つの要素は、さらにひとつの配列になっています。
次の処理でlist関数を使っていますが、上記のようにネストすることで、深い階層の値も一括で展開可能です。

echoで出力すると「太郎 / 次郎 / 三郎 / 花子」が出力されました。

取得したい箇所を指定する

一部の値のみを変数に展開することができます。
スキップしたい箇所は、カンマ(,)のみを書くようにします。

<?php
$foods = ['ピザ', '寿司', 'ハンバーガー', '巻き寿司', 'ラーメン'];

list(, $sushi, , $makiSushi) = $foods;
echo "{$sushi} / {$makiSushi}"; // 寿司 / 巻き寿司

$foods配列に食べ物の名前を格納しています。
次の処理でlist関数を使って変数に展開していますが、必要のない値には変数を割り当てていません。

echoで出力すると「寿司 / 巻き寿司」が出力されました。

文字列だったとき

list関数に展開する対象が、配列以外の場合はNULLが返ってきます。

<?php
list($test) = "test";
var_dump($test); // NULL

list関数に対して、文字列を代入しようとしています。
この場合は$testの値はNULLになります。

数値だったとき

数値の場合にもNULLが返ってきます。

<?php
list($test) = 999;
var_dump($test); // NULL

list関数に対して、数値の999を代入しました。
この場合にも$testの値はNULLになります。

list関数についてまとめ

今回はPHPのlist関数について確認していきました。
右辺(右側)に代入で、配列を指定することにより、list関数に書いた変数に値が展開されました。
そして、配列以外の場合はNULLが返ってきました。

使い所としては、下記のようにデータを配列で一括で取った後に、変数に展開したい時などかと思います。

・CSVデータの1行を配列で取った後に変数に展開したい
・PDOでDBのデータを配列として取り出したものを変数に展開したい

コメント

タイトルとURLをコピーしました