list
(PHP 4, PHP 5, PHP 7)
list — Присваивает переменным из списка значения подобно массиву
Описание
Подобно array(), это не функция, а языковая конструкция. list() используется для того, чтобы присвоить списку переменных значения за одну операцию.
Замечание:
До PHP 7.1.0, list() работала только с индексированными массивами и принимала числовые индексы начиная с 0.
В 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 | Больше нельзя разбирать строки с помощью этой функции. |
Примеры
Пример #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('кофе', 'коричневый', 'кофеин');
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);
?>
Выведет (сравните порядок исходных элементов с порядком, в котором они были перезаписаны list()):
Результат выполнения данного примера в PHP 7:
array(3) { [0]=> string(6) "кофе" [1]=> string(5) "коричневый" [2]=> string(8) "кофеин" }
Результат выполнения данного примера в PHP 5:
array(3) { [2]=> string(8) "кофеин" [1]=> string(5) "коричневый" [0]=> string(6) "кофе" }
Пример #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"
Пример #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