Распаковку массивов можно использовать вместо array_merge()
:
$a = [ 1 ];
$b = [ 2 ];
// $c и $d ниже будут идентичны
$c = array_merge($a, $b, [3]);
$d = [ ...$a, ...$b, 3 ];
При передаче ассоциативного массива функции его распаковка обеспечивает распознавание имен ключей в качестве названий аргументов, что позволяет указывать их в массиве в произвольном порядке.
function func($x, $a, $b)
{
print_r(get_defined_vars());
}
$array = [
// Обратите внимание: сначала идет b, потом a -
// не так, как в определении функции
'b' => 'Это B',
'a' => 'Это A',
];
func(15, ...$array);
Функция распознала ключи массива как явно поименованные аргументы и расположила их в нужном порядке:
Array
(
[x] => 15
[a] => Это A
[b] => Это B
)
Это позволяет создавать функции с аргументами в виде отдельных переменных, а не передавать им сводный массив, что сокращает и упрощает код. Сравните два варианта:
$settings = [
'x' => 1,
'y' => 20
];
function a($config) {
$config['x'];
$config['y'];
}
a($settings);
function b($x, $y) {
$x;
$y;
}
b(...$settings);
Возможность распаковки массивов существует в PHP с версии 5.6.