/ php

Оператор раскладывания (Spread) для массивов в PHP 7.4

Сообществом было проголосовано в поддержку добавления оператора раскладывания в выражениях при работе с массивами. В результате чего, эта возможность была добавлена в PHP 7.4.

Оператор раскладывания появился в PHP ещё в версии 5.6. А текущее обновление только расширяет его функциональные возможности. Оно расширяет работу при использовании массивов; а так же массивов и объектов, поддерживающих Traversable, которые могут быть расширены. Вот основной пример из RFC:

$names = ['Alex', 'Mike', 'Julia'];
$users = ['Jorge', ...$names, 'Lily'];
var_dump($users);
// ['Jorge', 'Alex', 'Mike', 'Julia', 'Lily'];

А так же, вот несколько более подробных примеров:

$arr1 = [1, 2, 3];
$arr2 = [...$arr1]; // [1, 2, 3]
$arr3 = [0, ...$arr1]; // [0, 1, 2, 3]
// слияние нескольких массивов
$arr4 = array(...$arr1, ...$arr2, 111); // [1, 2, 3, 1, 2, 3, 111]
$arr5 = [...$arr1, ...$arr1]; // [1, 2, 3, 1, 2, 3]

function getArr() {
  return ['a', 'b'];
}
$arr6 = [...getArr(), 'c']; // ['a', 'b', 'c']

// с использованием итератора массива
$arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; // ['a', 'b', 'c']

function arrGen() {
    for($i = 11; $i < 15; $i++) {
        yield $i;
    }
}

// с использованием генератора
$arr8 = [...arrGen()]; // [11, 12, 13, 14]

Строковые ключи, к сожалению, не поддерживаются. Вы можете использовать только массивы с индексированными ключами. Автор RFC говорит об этом так:

Для сохранения поддержки распаковки аргументов функции, строковые ключи не поддерживаются. При обнаружении строкового ключа в массиве данных будет показана ошибка.

Резюме

В этой статье вы узнали, как обновили оператор spread в PHP 7.4, что добавили, и какие ограничения остались. Благодаря детальным примерам использования оператора раскладывания в PHP 7.4, вам легко его изучить и внедрить в ваш проект, в зависимости от контекста.