Деструктуризация массивов — это элегантный способ "распаковать" значения из массива в отдельные переменные. Вместо того чтобы писать `$a = $array[0]; $b = $array[1];`, вы можете сделать это одной строкой: `[$a, $b] = $array;`. Эта возможность, доступная как для индексированных, так и для ассоциативных массивов, делает код значительно чище и короче.
В этом уроке мы изучим все тонкости деструктуризации: от базового синтаксиса с использованием list() и короткой записи `[]` до пропуска элементов, работы с ассоциативными массивами и даже применения этой техники в циклах `foreach`. Задания помогут вам освоить этот мощный синтаксический сахар и начать писать более выразительный PHP-код.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Основы деструктуризации: короткий синтаксис
Начиная с PHP 7.1, для деструктуризации массивов можно использовать короткий синтаксис с квадратными скобками `[]`. Распакуйте массив `$data` в переменные `$first` и `$second`, используя эту современную конструкцию.
<?php
$data = [10, 20];
// Распаковываем массив в две переменные
[input1S, input2S] = $data;
echo $first . ' ' . $second;
?>Классический синтаксис с list()
До появления короткого синтаксиса `[]` для деструктуризации использовалась языковая конструкция `list()`. Она работает аналогично. Проанализируйте код и выберите, какое значение будет выведено на экран.
<?php
$point = [150, 75];
list($x, $y) = $point;
echo $y;
?>Пропуск элементов при деструктуризации
При деструктуризации можно пропускать ненужные элементы массива. В этом коде стоит задача поместить первый элемент в `$a`, а третий — в `$c`, пропустив второй. Сейчас код делает это неправильно, так как в `$c` попадает второй элемент. Исправьте строку деструктуризации.
<?php$data = ['red', 'green', 'blue']; [$a, $c] = $data; // Ожидаемый результат: $a = 'red', $c = 'blue'echo "A is $a, C is $c";?>Деструктуризация ассоциативных массивов
Деструктуризация прекрасно работает и с ассоциативными массивами. В этом случае вы указываете ключи, чтобы извлечь соответствующие им значения. Проанализируйте код и напишите, что он выведет на экран.
<?php
$book = [
'author' => 'George Orwell',
'title' => '1984',
'year' => 1949
];
['title' => $book_title] = $book;
echo $book_title;
?>Переименование переменных при деструктуризации
Иногда имена ключей в массиве не подходят для имен переменных. Деструктуризация позволяет сразу "переименовать" их. Распакуйте массив `$user`, присвоив значение ключа 'user_id' переменной `$id`, а значение 'user_name' — переменной `$name`. Используйте токены из банка.
<?php
$user = ['user_id' => 42, 'user_name' => 'John Doe'];
[input1S => input2S, input3S => input4S] = $user;
echo "ID: $id, Name: $name";
?>Деструктуризация в цикле foreach
Одна из самых удобных областей применения деструктуризации — это циклы `foreach` при итерации по массиву массивов. Соберите из частей скрипт, который перебирает массив пользователей и для каждого выводит его ID и имя в отформатированной строке.
$users = [['id' => 1, 'name' => 'Neo'], ['id' => 2, 'name' => 'Morpheus']];foreach ($users as ['id' => $id, 'name' => $name]) {<?php echo "User $id is $name\n";}foreach ($users as $user) {echo $user['id'];?>Элегантный обмен переменных
Деструктуризация позволяет очень изящно обменивать значения двух переменных местами без использования третьей временной переменной. В коде ниже допущена синтаксическая ошибка в этой операции. Найдите и исправьте её, чтобы переменные поменялись значениями.
<?php$a = 5;$b = 10; [$a, $b] = $b, $a; // Ошибка в синтаксисе echo "a = $a, b = $b";?>Вложенная деструктуризация
Деструктуризация может быть вложенной, что позволяет извлекать значения из многомерных массивов еще более эффективно. Проанализируйте код со вложенной деструктуризацией и определите, какое значение будет выведено.
<?php
$data = [
'product_id' => 123,
'info' => [
'title' => 'Laptop',
'details' => [
'name' => 'SuperBook Pro',
'price' => 1500
]
]
];
['info' => ['details' => ['name' => $product_name]]] = $data;
echo $product_name;
?>