(PHP 4, PHP 5, PHP 7, PHP 8)
list — Присваивает переменным значения как массиву
Как и конструкция array(), это не функция, а языковая конструкция. Конструкцией list() пользуются, чтобы присваивать списку переменных значения за одну операцию. Строки нельзя распаковать, а выражения list() нельзя вызывать без аргументов.
Замечание:
До PHP 7.1.0 конструкция list() работала только с индексными массивами и принимала числовые индексы начиная с 0.
Начиная с PHP 7.1.0 для деструктуризации массивов с нецелочисленными или непоследовательными ключами в конструкции list() разрешили указывать явные ключи. Подробнее об этом рассказывает блок «Деструктуризация массива».
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