Skip to content

Instantly share code, notes, and snippets.

@1234ru
Last active May 11, 2024 14:21
Show Gist options
  • Save 1234ru/4570ef98164718d328fcaa517608b34d to your computer and use it in GitHub Desktop.
Save 1234ru/4570ef98164718d328fcaa517608b34d to your computer and use it in GitHub Desktop.
PHP: распаковка массивов при передаче функциям и слиянии массивов

Распаковку массивов можно использовать вместо 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment