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

# list

(PHP 4, PHP 5, PHP 7, PHP 8)

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

### 説明

function list(mixed `$var`, mixed `...$vars` = ?): array

array() と同様に、 この関数は実際には関数ではなく言語構造です。 list() は、 この関数は、配列や ArrayAccess を実装したオブジェクトを扱うことができます。 list() には、空の式を指定できません。

> 注意:

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

PHP 7.1.0 より後のバージョンでは、list() には明示的にキーを含めることができます。 これによって、数値でないキーや、連続していないキーの配列を分解できるようになっています。 配列の分解に関する詳細な情報は、 配列の分解 を参照ください。

> 注意:

> 定義されていない配列のキーにアクセスしようとすることは、 その他の未定義の変数にアクセスすることと同じです: つまり、`E_WARNING` (PHP 8.0.0 より前は、`E_NOTICE`) レベルのエラーが発生し、結果は `null` になります。

> スカラー値を分解しようとすると、 全ての変数に `null` が代入されます。 ArrayAccess を実装していないオブジェクトを分解しようとすると、 致命的なエラーが発生します。

### パラメータ

`var`

  変数。

`vars`

  残りの変数。

### 戻り値

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

### 変更履歴

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

### 例

例1 list() の例

    <?php

    $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() の使用法の例

    <?php
    result = $pdo->query("SELECT id, name FROM employees");
    while (list($id, $name) = $result->fetch(PDO::FETCH_NUM)) {
        echo "id: $id, name: $name\n";
    }
    ?>

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

    <?php

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

    var_dump($a, $b, $c);

    ?>

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

    int(1)
    int(2)
    int(3)

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

例4 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"

例5 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() - 配列からシンボルテーブルに変数をインポートする

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open