Php/docs/function.list
list
(PHP 4, PHP 5, PHP 7)
list — 把数组中的值赋给一组变量
说明
像 array() 一样,这不是真正的函数,而是语言结构。 list() 可以在单次操作内就为一组变量赋值。
Note:
在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。
Warning PHP 5 里,list() 从最右边的参数开始赋值; PHP 7 里,list() 从最左边的参数开始赋值。
如果你用单纯的变量,不用担心这一点。 但是如果你用了具有索引的数组,通常你期望得到的结果和在 list() 中写的一样是从左到右的,但在 PHP 5 里实际上不是, 它是以相反顺序赋值的。
通常而言,不建议依赖于操作的顺序,在未来可能会再次发生修改。
参数
var
- 一个变量。
vars
- 更多变量。
返回值
返回指定的数组。
更新日志
版本 | 说明 |
---|---|
7.3.0 | 支持在数组解构时传引用。 |
7.1.0 | 现在可以指定 list() 中的键。
这就可以解构非数字键或者无顺序的数组。 |
7.0.0 | 赋值操作的顺序发生了变化。 |
7.0.0 | list() 表达式不再可以完全为空。 |
7.0.0 | 字符串无法再被拆包(unpack)。 |
范例
Example #1 list() 例子
<?php$info = array('coffee', 'brown', 'caffeine');// 列出所有变量list($drink, $color, $power) = $info;echo "$drink is $color and $power makes it special.\n";// 列出他们的其中一个list($drink, , $power) = $info;echo "$drink has $power.\n";// 或者让我们跳到仅第三个list( , , $power) = $info;echo "I need $power!\n";// list() 不能对字符串起作用list($bar) = "abcde";var_dump($bar); // NULL?>
Example #2 list() 用法的一个例子
<table> <tr> <th>Employee name</th> <th>Salary</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>
Example #3 使用嵌套的 list()
<?phplist($a, list($b, $c)) = array(1, array(2, 3));var_dump($a, $b, $c);?>
int(1) int(2) int(3)
Example #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" }
Example #5 list() 和索引顺序定义
list() 使用 array 索引的顺序和它何时定义无关。
<?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"
Example #6 带键的 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