関数・クラス解説

list

version:PHP 4, PHP 5, PHP 7 (公式)

配列と同様の形式で、複数の変数への代入を行う

公式リファレンス

書式

list ( mixed $var [, mixed ...$vars ] ) : array

説明

array() と同様に、 この関数は実際には関数ではなく言語構造です。 list() は、 単一の操作で一連の変数に値を代入するために使われます。

注意:

PHP 7.1.0 より前のバージョンでは、list() は数値添字の配列でのみ動作し、 また、添字は 0 から始まることを想定していました。

警告

PHP 5 では、list()は、最も右のパラメータから値を代入します。 PHP 7 では、list()は、最も左のパラメータから値を代入します。

プレーンな変数を使用している場合には、このことを気にする必要はありません。 しかし、添字配列を使用している場合には、配列の添字の順番が list() に書いたものと同じく左から右となることを通常は期待しますが、 PHP 5 ではそうはなりません。この配列の添字は逆の順番となります。

一般論として、特定の操作順に依存することは避けたほうがいいでしょう。 将来的に、その順番が変更される可能性があるからです。

パラメータ

var
変数。
vars
残りの変数。

返値

代入した配列を返します。

注意

警告 PHP 5 では、list()は、最も右のパラメータから値を代入します。 PHP 7 では、list()は、最も左のパラメータから値を代入します。 プレーンな変数を使用している場合には、このことを気にする必要はありません。 しかし、添字配列を使用している場合には、配列の添字の順番が list() に書いたものと同じく左から右となることを通常は期待しますが、 PHP 5 ではそうはなりません。この配列の添字は逆の順番となります。 一般論として、特定の操作順に依存することは避けたほうがいいでしょう。 将来的に、その順番が変更される可能性があるからです。

更新履歴

バージョン 説明
7.3.0 配列へ分割して代入する操作が、リファレンスへの代入をサポートしました。
7.1.0 キーを list() 関数で指定できるようになりました。 これによって、キーが数値でなかったり、連続していなかったりした場合に配列の構造を変えることができるようになります。
7.0.0 代入操作が行われる順番が変わりました
7.0.0 list() の式をまったくの空にすることはできなくなりました
7.0.0 文字列は扱えなくなりました

サンプル

例1 list() の例

$info = array('コーヒー', '茶色', 'カフェイン'); // すべての変数の取得 list($drink, $color, $power) = $info; echo "$drink の色は $color で、$power が含まれています。\n"; // 一部の変数の取得 list($drink, , $power) = $info; echo "$drink には $power が含まれています。\n"; // 三番目のみの取得 list( , , $power) = $info; echo "$power 欲しい!\n"; // list() は文字列では動作しません list($bar) = "abcde"; var_dump($bar); // NULL

例2 list() の使用法の例

<table> <tr>  <th>社員氏名</th>  <th>給与</th> </tr> $result = $pdo->query("SELECT id, name, salary FROM employees"); while (list($id, $name, $salary) = $result->fetch(PDO::FETCH_NUM)) {     echo " \n" .           "  $name\n" .           "  $salary\n" .           " \n"; } </table>

例3 ネストした list() の使用法

list($a, list($b, $c)) = array(1, array(2, 3)); var_dump($a, $b, $c); int(1) int(2) int(3)

例4 配列の添字を使用した list() の例

$info = array('coffee', 'brown', 'caffeine'); list($a[0], $a[1], $a[2]) = $info; var_dump($a);

次のような出力になります(list() の文法に書かれた 順番と、要素の順番の違いに注意):

上の例の PHP 7 での出力は、このようになります。

array(3) { [0]=> string(6) "coffee" [1]=> string(5) "brown" [2]=> string(8) "caffeine" }

上の例の PHP 5 での出力は、このようになります。

array(3) { [2]=> string(8) "caffeine" [1]=> string(5) "brown" [0]=> string(6) "coffee" }

例5 list() と添字の定義順

list() が配列の要素をどの順に処理するかは、配列の添字とは無関係です。

<?php$foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');$foo[1] = 'd';list($x, $y, $z) = $foo;var_dump($foo, $x, $y, $z);

結果は次のようになります (list() 内で要素をどの順で利用しているかに注目しましょう)。

array(4) { [2]=> string(1) "a" ["foo"]=> string(1) "b" [0]=> string(1) "c" [1]=> string(1) "d" } string(1) "c" string(1) "d" string(1) "a"

例6 list() をキーを指定して使う

PHP 7.1.0 以降では、list() に明示的に キーを含めることができるようになりました。 任意の式も指定可能です。 数値や文字のキーも許されますが、 キーがない要素とある要素を混ぜることは許されません

<?php$data = [    ["id" => 1, "name" => 'Tom'],    ["id" => 2, "name" => 'Fred'],];foreach ($data as ["id" => $id, "name" => $name]) {    echo "id: $id, name: $name\n";}echo PHP_EOL;list(1 => $second, 3 => $fourth) = [1, 2, 3, 4];echo "$second, $fourth\n";

上の例の出力は以下となります。

id: 1, name: Tom id: 2, name: Fred 2, 4

参考

  • each() - 配列から現在のキーと値のペアを返して、カーソルを進める
  • array() - 配列を生成する
  • extract() - 配列からシンボルテーブルに変数をインポートする
  • ワード検索


    ※入力キーワードが、関数名・説明文・タグに含まれるものを検索

    関数名アルファベット別

    A B C D E F G H I J
    K L M N O P Q R S T
    U V W X Y Z _

    最終更新一覧

    stristr
     大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却

    stripslashes
     バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く

    stripos
     大文字小文字を区別せずに文字列が最初に現れる位置を取得する

    stripcslashes
     addcslashes() でクォートされた文字列をアンクォートする

    strip_tags
     文字列から HTML と PHP のタグを除去して返却

    strcspn
     指定した文字が最初に現れる位置を調べる

    strcoll
     ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する

    strcmp
     2つの文字列を比較し同じか(あるいは大小)を判定する

    strchr
     strstr() のエイリアス

    strcasecmp
     2つの文字列を比較(大文字小文字を区別せず同じとみなす)

    カテゴリー一覧

    PHP の振る舞いの変更
    音声フォーマットの操作
    認証サービス
    コマンドライン関連
    圧縮およびアーカイブ
    暗号
    データベース関連
    日付および時刻関連
    ファイルシステム
    自然言語および文字エンコーディング
    画像処理および作成
    メール関連
    数学
    テキスト以外の MIME 型
    プロセス制御
    その他の基本モジュール
    その他のサービス
    検索エンジン用の拡張モジュール
    サーバー固有のモジュール
    セッション関連
    テキスト処理
    変数・データ型関連
    ウェブサービス
    Windows 用のモジュール
    XML 操作
    GUI用の拡張モジュール