PHPでは、配列の値を複数の変数に1つずつ代入できるlist関数があります。
この記事では、
- list関数とは
- list関数の基本的な使い方
という基本的な内容から、
- 関数の戻り値をlistで取得する方法
- 配列の一部のみ取得する方法侍エンジニア
- 他の配列の要素に代入する
- 指定したディレクトリのファイルの一覧をlistで取得する方法
- CSVファイルの値を取得する方法
list関数の注意点
などの応用的な使い方に関しても解説していきます。今回はそんなlist関数の使い方についてわかりやすく解説します!
listとは
list関数は配列の値を変数として、指定した順番に格納するときに使用します。そのため、配列のキーを指定して値を1つずつ取り出すより、記述量が少なくて済みますし効率も上がります。
list関数は以下のように記述します。書き方:
array list($変数1, [$変数2 $... ])
引数:値を代入したい変数を指定します。
引数に指定した変数は、配列の要素番号0から順番に格納されます。そのため、list関数の引数と配列の要素数は合わせる必要があります。以下のように代入式の左辺でlist関数を定義し、右辺の配列から要素ごとにlist関数で指定した変数に代入します。
list($変数 $...) = $配列;
返り値:代入した配列を変数に格納して返します。
PHP7からの変更点:PHP5では右のパラメータから値を代入していましたが、PHP7では左のパラメータから代入するようになりました。
つまり、変数への代入は、定義された順番通り値が代入されます。また、list()の式を空にすることや文字列は扱えなくなりました。
listの基本的な使い方
ここでは、実際にlist関数の使い方を見ていきましょう!
基本的な使い方
基本的な使い方として、list関数を使用して定義した配列から、複数の変数に値を代入する方法を紹介します。
<?php $fruits_array = ['りんご', 'オレンジ', 'メロン']; //listの複数変数を配列から代入 list($apple, $orange, $melon) = $fruits_array; echo $apple.','.$orange.','.$melon; ?>
実行結果:
りんご,オレンジ,メロン
実行結果のようにlist関数を使用すれば、配列から複数の変数に一気に値を取得することができます。連想配列の場合も同様に値を取得できます。
$fruits_array = [ 0 => 'りんご', 1 => 'オレンジ', 2 => 'メロン' ]; //listの複数変数を配列から代入 list($apple, $orange, $melon) = $fruits_array; echo $apple.','.$orange.','.$melon;
実行結果:
りんご,オレンジ,メロン
関数の返り値を取得する
list関数の便利な使い方として、配列を返す関数から一気に値を取得することができます。以下のサンプルでは、呼出した関数の戻り値をそのまま、list関数で複数の変数に代入しています。
サンプルプログラム
<?php function getValue(){ $array = [100, 200, 300]; return $array; } //配列を返す関数から値を取得する list($val1, $val2, $val3) = getValue(); echo $val1.','.$val2.','.$val3; ?>
実行結果:
100,200,300
一部のみ取得する
配列の値を1部のみ取得したい場合は、代入したい箇所だけに変数を指定し、代入しない箇所は,(カンマ)のみとします。
サンプルプログラム
$array = [10, 20, 30, 40, 50]; list(, , $value1, , $value2) = $array; echo $value1.','.$value2;
実行結果:
30,50
このサンプルでは、配列$arrayの$array[2]と$array[4]の箇所がlist関数の引数で指定した$value1と$value2となります。
他の配列の要素を代入する
配列1と配列2の2つの配列があって、配列2の要素から指定した要素番号の値を、配列1に代入したいときはlist関数を使用すれば一括で代入することができます。以下に配列の要素にlistを使用して一括で代入するサンプルを紹介します。
サンプルプログラム
$number = [100, 200, 300, 400, 500]; $items = ['item1', 'item2', 'item3']; list($number[0], $number[2]) = $items; print_r($number);
実行結果:
Array ( [0] => item1 [1] => 200 [2] => item2 [3] => 400 [4] => 500 )
listの応用的な使い方
ディレクトリのファイル一覧を取得する
指定したディレクトリのファイル一覧を変数に格納したい場合は、glob関数の返り値をlistで取得する方法があります。glob関数は指定したディレクトリのパターンにマッチしたファイル名を、パスから取得して配列で返します。
glob関数は以下のように記述します。書き方:
array glob(string $パターン、int $フラグ = 0);
以下にglob関数の返り値をlist関数を使用して、変数に代入する簡単なサンプルを紹介します。サンプルプログラム
<?php $dir = '/Users/Shared/PHP/*.txt'; list($file1, $file2, $file3) = glob($dir); echo $file1; echo '<br>'; echo $file2; echo '<br>'; echo $file3; ?>
実行結果:
/Users/Shared/PHP/php1.txt /Users/Shared/PHP/php2.txt /Users/Shared/PHP/php3.txt
CSVファイルの値を取得する
CSVファイルを読み込むときもlist関数を使用すれば、各項目ごとに変数名を付けて、わかりやすく管理することができます。以下にlist関数を使用して、CSVファイルを読み込むサンプルを紹介します。読み込むcsvファイルはあらかじめ用意しておきます。
test.csv
1,apple,100 2,orange,80 3,melon,300
サンプルプログラム
$fp = fopen("./test.csv", "r"); while(list($num, $item, $price) = fgetcsv($fp, 1024)) { echo '商品番号:' . $num . '<br>'; echo '商品名:' . $item . '<br>'; echo '値段:' . $price . '円<br>'; }
実行結果:
商品番号:1 商品名:apple 値段:100円 商品番号:2 商品名:orange 値段:80円 商品番号:3 商品名:melon 値段:300円
上記のサンプルでは読み込みモードでcsvファイルを開き、CSVファイルを読み込むgetcsv関数を使用してwhile文でCSVの内容を1行ずつ取得しています。
while文の式ではCSVファイルの項目分list関数で変数を用意しておけば、listで指定した各変数にCSVファイルの値が格納されます。
listの注意点
list関数は配列や配列を返り値とする仕様の関数であれば、基本的に値を取得することが可能です。しかし、list関数は配列の要素0からの取得を前提としています。
そのため配列の要素を削除した場合など、配列の値が要素0から格納されていない場合は、正常に取得することができません。サンプルプログラム:
<?php $valarray[2] = 200; $valarray[3] = 300; $valarray[4] = 400; list($val1, $val2, $val3) = $valarray; echo $val1.','.$val2.','.$val3; ?>
実行結果:
,,200
連想配列でキーを0ではなく1から指定すると、list関数で全ての値を取得できません。サンプルプログラム
$fruits_array = [ 1 => 'りんご', 2 => 'オレンジ', 3 => 'メロン' ]; //listの複数変数を配列から代入 list($apple, $orange, $melon) = $fruits_array; echo $apple.','.$orange.','.$melon;
実行結果:
,りんご,オレンジ
連想配列のキーが文字列の場合はlistによる代入は行われません。list関数を使用するときは配列のキーは必ず数値にする必要があります。
サンプルプログラム
$fruits_array = [ 'value1' => 'りんご', 'value2' => 'オレンジ', 'value3' => 'メロン' ]; //listの複数変数を配列から代入 list($apple, $orange, $melon) = $fruits_array; echo $apple.','.$orange.','.$melon;
実行結果:
,,
まとめ
ここではlist関数について、
- list関数とは
- list関数の基本的な使い方
- 関数の戻り値をlistで取得する方法
- 配列の一部のみ取得する方法
- 他の配列の要素に代入する
- 指定したディレクトリのファイルの一覧をlistで取得する方法
- CSVファイルの値を取得する方法
- list関数の注意点
など、基本から応用的な使い方まで解説しました。list関数は配列の値を取得するときに便利ですが、注意点で説明したとおり、仕様をよく理解して使わなければ意図した結果を得られない場合もあります。
もしlist関数の使い方を忘れてしまったら、この記事を思い出してくださいね。