【PHP入門】list関数の基本から応用までわかりやすく解説!

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関数の使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説