list

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

説明

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

array と同様に、 この関数は実際には関数ではなく言語構造です。 list は、 単一の操作で一連の変数に値を代入するために使われます。 この関数は、文字列を扱うことは出来ませんし、 list には、空の式を指定できません。

注意:

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

パラメータ

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)

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

例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