listПрисваивает переменным значения как массиву
&reftitle.description;
arraylistmixedvarmixedvars
Как и конструкция array, это не функция,
а языковая конструкция. Конструкция list
присваивает списку переменных значения за одну операцию.
Распаковку поддерживают только массивы и объекты, классы которых реализуют интерфейс ArrayAccess.
Нельзя указывать пустую конструкцию list в выражениях присваивания.
До PHP 7.1.0 конструкция list работала только
с индексными массивами и принимала числовые индексы начиная с 0.
Начиная с PHP 7.1.0 для деструктуризации массивов с нецелочисленными или непоследовательными ключами
в конструкции list разрешили указывать явные ключи.
Подробнее об этом рассказывает блок
«Деструктуризация массива».
Попытка получить доступ к неопределённому ключу массива
аналогична обращению к любой другой неопределённой переменной:
выдаётся сообщение об ошибке уровня E_WARNING,
или ошибки уровня E_NOTICE до PHP 8.0.0,
а результатом становится значение &null;.
Попытка распаковать скалярное значение присваивает значение &null; каждой переменной в левой части выражения присваивания.
При попытке распаковать объект, класс которого не реализует интерфейс ArrayAccess, возникает фатальная ошибка.
&reftitle.parameters;
var
Переменная.
vars
Остальные переменные.
&reftitle.returnvalues;
Функция возвращает массив переменных, которым присвоила значения.
&reftitle.changelog;
&Version;&Description;7.3.0
Добавили поддержку присваивания по ссылкам при деструктуризации массива.
7.1.0
Конструкция list теперь поддерживает ключи.
Это помогает разыменовывать ассоциативные массивы и массивы с индексами не по порядку.
&reftitle.examples;
Примеры присваивания переменным значений конструкцией list
]]>
Пример присваивания значений переменным конструкцией list
query("SELECT id, name FROM employees");
while (list ($id, $name) = $result->fetch(PDO::FETCH_NUM)) {
echo "id: $id, name: $name\n";
}
?>
]]>
Пример работы вложенной конструкции list
]]>
&example.outputs;
Порядок определения индексов в массиве,
который обработает языковая конструкция list,
неважен.
Пример поведения конструкции list
с определениями порядка индексов
'a', 'foo' => 'b', 0 => 'c');
$foo[1] = 'd';
list ($x, $y, $z) = $foo;
var_dump($foo, $x, $y, $z);
?>
]]>
Следующий параграф показывает вывод, который сформирует пример.
Обратите внимание на порядок элементов сравнения в массиве
и порядок, в котором элементы записали в синтаксисе конструкции list:
string(1) "a"
["foo"]=>
string(1) "b"
[0]=>
string(1) "c"
[1]=>
string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"
]]>
Пример присваивания значений переменным
конструкцией list с указанием ключей
Начиная с PHP 7.1.0 конструкции list разрешили
содержать явные ключи, которые указывают как произвольные выражения.
Конструкция принимает смесь строковых и целочисленных ключей; но нельзя смешивать
элементы с ключами и без ключей.
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";
?>
]]>
&example.outputs;
&reftitle.seealso;
eacharrayextract