Оператор распаковки ...

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Оператор распаковки (...) — это мощный инструмент PHP для работы с массивами и переменным количеством аргументов. Он позволяет распаковать элементы массива как отдельные аргументы функции, объединить несколько массивов в один, передать параметры и многое другое. В этом тренажере ты научишься правильно применять оператор распаковки в различных контекстах: при вызове функций, в определениях функций с параметрами rest и при объединении массивов. Начнём с базовых примеров и перейдём к более сложным сценариям использования, которые помогут тебе писать чистый и эффективный PHP-код.

Список тем

Распаковка массива при вызове функции

id: 38991_task1

Функция sum() принимает переменное количество аргументов и суммирует их. Используя оператор распаковки, передайте массив значений как отдельные аргументы функции и выведите результат суммирования всех чисел.

Заполните пропуски
<?php
function sum(...$numbers) {
    return array_sum($numbers);
}
$values = [10, 20, 30];
echo sum(input1S);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат функции max с распаковкой

id: 38991_task2

Определите, какое значение выведет встроенная функция max(), когда элементы массива распаковываются как отдельные аргументы через оператор ....

Выберите правильный вариант ответа
<?php
$arr = [15, 42, 8, 100, 33];
echo max(...$arr);
?>
Сообщения
Проверить
Показать подсказку

Распаковка в литеральный массив

id: 38991_task3

Объедините два массива в один новый массив, используя оператор распаковки внутри литеральных скобок. Результирующий массив должен содержать все элементы обоих исходных массивов подряд.

Заполните пропуски
<?php
$first = ['a', 'b', 'c'];
$second = ['d', 'e'];
$combined = [input1S, input2S];
echo count($combined);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте использование оператора распаковки

id: 38991_task4

В коде есть ошибка: функция max() не получает распакованные значения, что приводит к неправильному результату. Исправьте строку так, чтобы значения были правильно распакованы для функции.

Найдите ошибку и исправьте
<?php
$values = [50, 100, 25, 75];
echo max($values);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат функции с параметрами rest

id: 38991_task5

Функция принимает переменное количество аргументов через оператор распаковки в параметрах. Определите точный вывод функции при вызове с тремя строковыми параметрами.

Что должно получиться?
<?php
function greet(...$names) {
    return "Hello: " . implode(", ", $names);
}
echo greet("Alice", "Bob", "Charlie");
?>
Сообщения
Проверить
Показать подсказку

Параметры rest в определении функции

id: 38991_task6

Создайте функцию, которая перемножает все переданные ей числовые аргументы. Используйте параметры rest для захвата всех аргументов и пройдите по ним в цикле foreach.

Заполните пропуски
<?php
function multiply(input1S) {
    $result = 1;
    foreach (input2S as $num) {
        $result *= $num;
    }
    return $result;
}
echo multiply(2, 3, 4);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Собрать функцию для обработки данных с распаковкой

id: 38991_task7

Соберите функцию, которая принимает несколько значений через распаковку в параметры rest, подсчитывает их количество и выводит результат в нужном формате.

Перетяните в правильном порядке строки из одного блока в другой
<?php
function process(...$items) {
    return count($items);
}
echo "Items: " . process(1, 2, 3, 4, 5);
?>
$result = array_sum($items);
echo implode(" ", $items);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте распаковку в литеральный массив

id: 38991_task8

Код пытается объединить два массива, но не использует оператор распаковки. Исправьте строку так, чтобы массивы правильно распаковались в литеральный массив.

Найдите ошибку и исправьте
<?php
$list1 = ['a', 'b'];
$list2 = ['c', 'd'];
$all = [$list1, $list2];
echo count($all);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сопоставьте описания и примеры распаковки

id: 38991_task9

Слева приведены описания операций с оператором распаковки, справа — примеры кода. Сопоставьте каждое описание с соответствующим примером.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Передать элементы массива как отдельные аргументы функции
Создать параметры rest в определении функции
Объединить массивы в литеральном массиве
[$x, $y] = [...$arr];
function test(...$params) {}
echo max(...$values);
Сообщения
Проверить
Показать подсказку

Заполните код распаковкой из банка токенов

id: 38991_task10

Используя готовые токены из банка, заполните пропуски в коде так, чтобы функция правильно работала с оператором распаковки и выдала верный результат.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$numbers = [5, 10, 15, 20];
function sum(input1S) {
    return array_sum(input2S);
}
echo sum(input3S);
?>
$numbers
...$numbers
...$params
$params
...
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат распаковки и объединения массивов

id: 38991_task11

Определите, какой результат даст объединение двух массивов через распаковку в литеральном массиве и их последующая обработка функцией implode().

Выберите правильный вариант ответа
<?php
$parts1 = [1, 2];
$parts2 = [3, 4];
$all = [...$parts1, ...$parts2];
echo implode("-", $all);
?>
Сообщения
Проверить
Показать подсказку

Результат функции с параметрами rest и подсчётом

id: 38991_task12

Функция использует параметры rest для сбора всех переданных аргументов и подсчитывает их количество. Определите точный вывод при вызове с четырьмя строковыми параметрами.

Что должно получиться?
<?php
function countWords(...$words) {
    return "Total: " . count($words);
}
echo countWords("PHP", "is", "powerful", "language");
?>
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру