Оператор распаковки был добавлен в выражения массивов начиная с PHP 7.4. В PHP для обозначения этого оператора используются три точки (...).
Если перед именем массива поставить оператор распаковки, элементы этого массива будут вставлены на место оператора:
Пример:
Результат:

Как это работает

  1. Определяется массив $numbers с двумя числами.
  2. Определяется массив $scores с числами 1, 2, 3 и к нему добавляются элементы из $numbers с помощью оператора распаковки.
  3. В результате массив $scores содержит числа 1, 2, 3, 4 и 5.
Оператор распаковки работает быстрее, чем функция array_merge(), так как является встроенной конструкцией языка, а не вызовом функции. Кроме того, PHP оптимизирует работу с константными массивами на этапе компиляции.
В отличие от передачи аргументов, оператор распаковки можно использовать в любом месте массива.

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

В начале массива:
Результат:
В середине массива:
Результат:

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

PHP позволяет использовать оператор распаковки несколько раз в одном выражении.
Результат:

Как это работает

  1. Определяются два массива: $even (чётные) и $odd (нечётные).
  2. С помощью оператора распаковки их элементы объединяются в новый массив $all.

Оператор распаковки с возвращаемым значением функции

Оператор распаковки можно использовать с массивом, который возвращает функция.
Результат:
Результат будет отличаться при каждом запуске из-за функции rand().

Оператор распаковки с генератором

Можно использовать оператор распаковки с генераторами.
Результат:

Оператор распаковки с объектом Traversable

Оператор распаковки работает не только с массивами, но и с любыми объектами, реализующими интерфейс Traversable.
Результат:

Оператор распаковки и именованные аргументы

С PHP 8 можно вызывать функции с именованными аргументами и использовать оператор распаковки.
В этом случае ключи массива совпадают с именами параметров функции.

Итог

  • В PHP оператор распаковки обозначается тремя точками (...).
  • Он позволяет "разворачивать" элементы массива или объекта, реализующего Traversable.
  • Используется для объединения массивов, передачи аргументов в функции и работы с генераторами.
  • С PHP 8 поддерживает именованные аргументы при вызове функций.