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が返ってきました。
使い所としては、下記のようにデータを配列で一括で取った後に、変数に展開したい時などかと思います。
・PDOでDBのデータを配列として取り出したものを変数に展開したい
コメント