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

# list

(PHP 4, PHP 5, PHP 7)

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

### 説明

list ( mixed `$var1` [, mixed `$...` ] ) : array

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

> 注意:

> list() は数値添字の配列でのみ動作します。 また、添字は 0 から始まることを想定しています。

警告

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

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

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

警告

list() を実行して配列を変更 (list($a, $b) = $b など) した場合の挙動は未定義です。

### パラメータ

`var1`

  変数。

### 返り値

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

### 変更履歴

バージョン | 説明
--- | ---
7.0.0 | 代入操作が行われる順番が変わりました 。
7.0.0 | list() の式をまったくの空にすることはできなくなりました 。
7.0.0 | 文字列は扱えなくなりました 。

### 例

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

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

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

`<?php
list($a, list($b, $c)) = array(1, array(2, 3));
var_dump($a, $b, $c);
?>`

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

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

`<?php
$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"

### 参考

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