List: примеры (PHP)
list(array $array): arrayКонструкция list() или ее синтаксический аналог [] (начиная с PHP 7.1) применяется для деструктуризации массивов. Она позволяет присвоить значения из массива нескольким переменным за одну операцию. Использование целесообразно, когда требуется извлечь элементы массива, особенно из функций, возвращающих списки значений.
Аргументами функции выступают переменные, разделенные запятыми. С PHP 7.1 можно указывать ключи массива для извлечения конкретных элементов. Начиная с PHP 7.3, аргументы разрешено завершать запятой.
list($a, $b) = [10, 20];
echo "a: $a, b: $b";
// Альтернативный синтаксис:
[$c, $d] = [30, 40];
echo " c: $c, d: $d";a: 10, b: 20 c: 30, d: 40
list(, $second, , $fourth) = ['a', 'b', 'c', 'd'];
echo "second: $second, fourth: $fourth";second: b, fourth: d
$data = ['id' => 5, 'name' => 'Иван'];
['name' => $userName, 'id' => $userId] = $data;
echo "$userName имеет id $userId";Иван имеет id 5
Деструктуризация через [] – начиная с PHP 7.1, квадратные скобки выполняют ту же роль, что и list(), с более лаконичным синтаксисом. Предпочтительнее в новом коде.
Функция each() – устарела в PHP 7.2 и удалена в 8.0. Использовалась для итерации по массиву с возвратом ключа и значения.
Функция extract() – импортирует элементы ассоциативного массива в текущую таблицу символов. Считается небезопасной из-за возможного переопределения переменных, применение не рекомендуется.
$var = null;
list($a, $b) = $var; // Ошибка в PHP до 7.1
// Начиная с PHP 7.1 – предупреждение, переменные получат nullWarning: Undefined array key 0 Warning: Undefined array key 1
$assoc = ['one' => 1, 'two' => 2];
list($x, $y) = $assoc;
echo "$x $y"; // Ожидается 1 2, но работает только с числовыми ключами(пустой вывод, так как $x и $y не получат значения)
[$a, $b, $c] = [100, 200];
echo "$a, $b, $c"; // $c будет undefined100, 200,
PHP 7.1 – введен синтаксис квадратных скобок [] как альтернатива list(). Добавлена возможность указывать ключи при деструктуризации ассоциативных массивов. Теперь list() может работать с объектами, реализующими интерфейс ArrayAccess.
PHP 7.3 – разрешена завершающая запятая в списке аргументов list().
PHP 8.1 – деструктуризация поддерживается для массивов, содержащих ссылки, с помощью нового синтаксиса [&$a, $b] = $arr.
$x = 5;
$y = 10;
[$x, $y] = [$y, $x];
echo "x: $x, y: $y";x: 10, y: 5
$matrix = [
[1, 2, 3],
[4, 5, 6]
];
foreach ($matrix as list($first, $second)) {
echo "first: $first, second: $second\n";
}
// Или с []:
foreach ($matrix as [$first, $second]) {
echo "$first - $second\n";
}first: 1, second: 2 first: 4, second: 5 1 - 2 4 - 5
function getCoordinates() {
return [45.123, 38.456];
}
[$lat, $lon] = getCoordinates();
echo "Широта: $lat, Долгота: $lon";Широта: 45.123, Долгота: 38.456
$arr = [1, 2, 3];
[&$ref, $b, $c] = $arr;
$ref = 100;
print_r($arr); // Изменится первый элемент исходного массиваArray
(
[0] => 100
[1] => 2
[2] => 3
)$config = [
'db_host' => 'localhost',
'db_user' => 'root',
'db_pass' => 'secret',
'cache' => true
];
['db_host' => $host, 'db_user' => $user, 'db_pass' => $pass] = $config;
echo "Подключение к $host с пользователем $user";Подключение к localhost с пользователем root
List в Javascript
const arr = [1, 2, 3];
const [first, second] = arr;
console.log(first, second); // 1 2
const obj = {x: 10, y: 20};
const {x, y} = obj;
console.log(x, y); // 10 201 2 10 20
В JavaScript деструктуризация работает для массивов и объектов, синтаксис похож на PHP, но более развит (значения по умолчанию, вложенность).
List в Python
lst = [7, 8, 9]
a, b, c = lst
print(a, b, c) # 7 8 9
# Распаковка со звездочкой
first, *rest = [1, 2, 3, 4]
print(first, rest) # 1 [2, 3, 4]7 8 9 1 [2, 3, 4]
В Python деструктуризация (распаковка) поддерживается для любых итерируемых объектов, включает оператор * для захвата нескольких элементов.
List в MySQL
Прямого аналога нет. Для извлечения значений из строки результата запроса используются операции SELECT ... INTO или присваивание в процедурах.