(PHP 4, PHP 5, PHP 7)
list — 配列と同様の形式で、複数の変数への代入を行う
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"