Оператор распаковки (...) — это мощный инструмент PHP для работы с массивами и переменным количеством аргументов. Он позволяет распаковать элементы массива как отдельные аргументы функции, объединить несколько массивов в один, передать параметры и многое другое. В этом тренажере ты научишься правильно применять оператор распаковки в различных контекстах: при вызове функций, в определениях функций с параметрами rest и при объединении массивов. Начнём с базовых примеров и перейдём к более сложным сценариям использования, которые помогут тебе писать чистый и эффективный 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+
Распаковка массива при вызове функции
Функция sum() принимает переменное количество аргументов и суммирует их. Используя оператор распаковки, передайте массив значений как отдельные аргументы функции и выведите результат суммирования всех чисел.
<?php
function sum(...$numbers) {
return array_sum($numbers);
}
$values = [10, 20, 30];
echo sum(input1S);
?>Результат функции max с распаковкой
Определите, какое значение выведет встроенная функция max(), когда элементы массива распаковываются как отдельные аргументы через оператор ....
<?php
$arr = [15, 42, 8, 100, 33];
echo max(...$arr);
?>Распаковка в литеральный массив
Объедините два массива в один новый массив, используя оператор распаковки внутри литеральных скобок. Результирующий массив должен содержать все элементы обоих исходных массивов подряд.
<?php
$first = ['a', 'b', 'c'];
$second = ['d', 'e'];
$combined = [input1S, input2S];
echo count($combined);
?>Исправьте использование оператора распаковки
В коде есть ошибка: функция max() не получает распакованные значения, что приводит к неправильному результату. Исправьте строку так, чтобы значения были правильно распакованы для функции.
<?php$values = [50, 100, 25, 75];echo max($values);?>Результат функции с параметрами rest
Функция принимает переменное количество аргументов через оператор распаковки в параметрах. Определите точный вывод функции при вызове с тремя строковыми параметрами.
<?php
function greet(...$names) {
return "Hello: " . implode(", ", $names);
}
echo greet("Alice", "Bob", "Charlie");
?>Параметры rest в определении функции
Создайте функцию, которая перемножает все переданные ей числовые аргументы. Используйте параметры rest для захвата всех аргументов и пройдите по ним в цикле foreach.
<?php
function multiply(input1S) {
$result = 1;
foreach (input2S as $num) {
$result *= $num;
}
return $result;
}
echo multiply(2, 3, 4);
?>Собрать функцию для обработки данных с распаковкой
Соберите функцию, которая принимает несколько значений через распаковку в параметры rest, подсчитывает их количество и выводит результат в нужном формате.
<?phpfunction process(...$items) { return count($items);}echo "Items: " . process(1, 2, 3, 4, 5);?>$result = array_sum($items);echo implode(" ", $items);Исправьте распаковку в литеральный массив
Код пытается объединить два массива, но не использует оператор распаковки. Исправьте строку так, чтобы массивы правильно распаковались в литеральный массив.
<?php$list1 = ['a', 'b'];$list2 = ['c', 'd'];$all = [$list1, $list2];echo count($all);?>Сопоставьте описания и примеры распаковки
Слева приведены описания операций с оператором распаковки, справа — примеры кода. Сопоставьте каждое описание с соответствующим примером.
[$x, $y] = [...$arr];function test(...$params) {}echo max(...$values);Заполните код распаковкой из банка токенов
Используя готовые токены из банка, заполните пропуски в коде так, чтобы функция правильно работала с оператором распаковки и выдала верный результат.
<?php
$numbers = [5, 10, 15, 20];
function sum(input1S) {
return array_sum(input2S);
}
echo sum(input3S);
?>Результат распаковки и объединения массивов
Определите, какой результат даст объединение двух массивов через распаковку в литеральном массиве и их последующая обработка функцией implode().
<?php
$parts1 = [1, 2];
$parts2 = [3, 4];
$all = [...$parts1, ...$parts2];
echo implode("-", $all);
?>Результат функции с параметрами rest и подсчётом
Функция использует параметры rest для сбора всех переданных аргументов и подсчитывает их количество. Определите точный вывод при вызове с четырьмя строковыми параметрами.
<?php
function countWords(...$words) {
return "Total: " . count($words);
}
echo countWords("PHP", "is", "powerful", "language");
?>