W3docs

list()

Функция list() в PHP используется для присваивания значений списку переменных за одну операцию при работе с массивами.

Введение

list() — это языковая конструкция PHP (не функция), которая деструктурирует массив, присваивая каждый его элемент отдельной переменной в одном выражении. Вместо того чтобы извлекать значения по одному индексу за раз, вы описываете структуру массива в левой части выражения и позволяете PHP заполнить переменные самостоятельно.

На этой странице рассматриваются базовый синтаксис, современная краткая форма [], способы пропуска и вложения элементов, форма с ассоциативными ключами (PHP 7.1+), а также типичные подводные камни. list() наиболее полезен, когда функция или выражение уже возвращает массив PHP и вы хотите дать имена его частям.

Базовый синтаксис

Базовый синтаксис конструкции list() выглядит следующим образом:

Синтаксис PHP конструкции list()

list($var1, $var2, $var3) = $array;

$array в правой части предоставляет значения. Конструкция присваивает их переменным в левой части по позиции — элемент 0 присваивается $var1, элемент 1$var2 и так далее.

Краткий синтаксис массива []

Начиная с PHP 7.1, вместо ключевого слова list() можно использовать квадратные скобки. Обе формы эквивалентны — краткая форма сейчас является более распространённым стилем:

<?php

$point = [10, 20];

[$x, $y] = $point;   // same as list($x, $y) = $point;

echo "$x, $y"; // Output: 10, 20

Пример использования

Вот пример использования конструкции list() в PHP:

Пример PHP list()

php— editable, runs on the server

В этом примере конструкция list() присваивает значения массива $fruits переменным $fruit1, $fruit2 и $fruit3. Значение каждой переменной затем выводится на экран.

Пропуск элементов

Вы можете игнорировать ненужные значения, оставив соответствующий слот пустым. Присваиваются только те элементы, которые вы именуете:

<?php

$data = ['red', 'green', 'blue', 'yellow'];

// Grab only the third element; skip the rest
list(, , $third) = $data;

echo $third; // Output: blue

Две ведущие запятые пропускают элементы 0 и 1, поэтому $third получает элемент 2 ("blue").

Вложенное деструктурирование

list() может быть вложен для распаковки многомерных массивов. Структура в левой части должна отражать структуру массива в правой части:

<?php

$coords = [[1, 2], [3, 4]];

[[$x1, $y1], [$x2, $y2]] = $coords;

echo "$x1,$y1 $x2,$y2"; // Output: 1,2 3,4

Обмен переменных

Поскольку правая часть полностью вычисляется до присваивания, list() — это чистый способ поменять местами две переменные без использования временной:

<?php

$a = 'first';
$b = 'second';

[$a, $b] = [$b, $a];

echo "$a $b"; // Output: second first

Расширенное использование

Конструкцию list() также можно комбинировать с другими функциями PHP для более сложных задач. Например, она хорошо работает с explode() для разбиения строки на массив:

php— editable, runs on the server

В этом примере explode() разбивает переменную $string на массив. Затем конструкция list() присваивает значения массива переменным $fruit1, $fruit2 и $fruit3. Значение каждой переменной затем выводится на экран.

Кроме того, list() поддерживает ассоциативные массивы, сопоставляя ключи с переменными:

<?php

$person = ['name' => 'Alice', 'age' => 30, 'city' => 'New York'];
list('name' => $name, 'age' => $age) = $person;

echo $name; // Output: Alice
echo $age;  // Output: 30

Обратите внимание, что ассоциативная форма требует, чтобы каждая переменная указывала свой ключ — нельзя смешивать ключевые и позиционные записи в одном list(). Эта форма особенно полезна при работе со структурированными данными, такими как JSON-ответы или строки базы данных.

Деструктурирование в цикле foreach

list() (или []) может располагаться непосредственно в позиции значения цикла foreach, распаковывая каждую строку по мере итерации. Это распространённый шаблон для массивов пар или записей:

<?php

$people = [
    ['Alice', 30],
    ['Bob', 25],
];

foreach ($people as [$name, $age]) {
    echo "$name is $age\n";
}
// Output:
// Alice is 30
// Bob is 25

Типичные подводные камни

  • list() работает только с массивами. Передача строки или null не деструктурирует её посимвольно; переменные просто устанавливаются в null (с предупреждением для null).
  • Отсутствующие элементы дают null. Если массив содержит меньше элементов, чем переменных, лишние переменные становятся null и PHP выдаёт предупреждение Undefined array key. Убедитесь, что массив достаточно большой, или заранее используйте значение по умолчанию с оператором null-объединения.
  • Порядок присваивания не гарантирован. Не полагайтесь на то, какая переменная присваивается первой в одном list(); никогда не пишите код, в котором одна цель зависит от того, что другая была присвоена раньше в том же выражении.
  • Нельзя смешивать ключевые и неключевые записи. В одном list() либо каждая запись использует 'key' => $var, либо ни одна.

Лучшие практики

  • Используйте для именования частей массива, а не для создания массивов. list() читает из массива; он никогда не создаёт его. Используйте array() / [], когда нужно создать данные.
  • Используйте осмысленные имена переменных. [$id, $name, $email] = $row; документирует структуру $row намного лучше, чем $row[0], $row[1], $row[2], разбросанные по коду.
  • Предпочитайте краткий синтаксис [] в PHP 7.1+ для единообразия с уже используемыми литералами массивов.
  • Используйте ключевую форму для ассоциативных данных, чтобы не зависеть молчаливо от порядка вставки.

Заключение

Конструкция list() (и её современный эквивалент []) позволяет деструктурировать массив в именованные переменные в одном выразительном выражении — по позиции, по ключу, вложенно или внутри foreach. Используйте её для придания осмысленных имён частям массивов, возвращаемых такими функциями, как explode(), и помните об описанных выше подводных камнях, чтобы отсутствующие или ошибочно напечатанные значения вас не удивили.

Практика

Практика
Какими способами можно создать индексированный массив в PHP?
Какими способами можно создать индексированный массив в PHP?
Was this page helpful?