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

変数。

返り値

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

例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(23));

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