PHP 스프레드 연산자는 기존 5.6 부터 함수 인자 전달할 때 사용되던 스프레드 연산자(...)가
7.4 버전 부터 Arrray (배열) 에 사용이 가능해지게 되었는데
아래의 예제처럼 배열 안에 [...[0, 1, 2]]과 같이 코드를 작성하면 [0, 1, 2] 로 나타나게 되는 연산자입니다.
<?php
$array1 = [0, 1, 2];
$array2 = [...$array1];
/**
* array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(2) }
* var_dump($array2); exit;
*/
$array3 = [7, ...$array2];
/**
* array(4) { [0]=> int(7) [1]=> int(0) [2]=> int(1) [3]=> int(2) }
* var_dump($array3); exit;
*/
평상 시에 두 배열을 합쳐야할 때 array_merge를 사용하게 되는데 이 때 스프레드 연산자를 사용하게 되면
좀 더 간략하게 사용할 수 있습니다.
<?php
$array1 = [0, 1, 2];
$array2 = [3, 4, 5];
$array3 = [...$array1, ...$array2];
/**
* array(6) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) }
* var_dump($array3); exit;
*/
$array4 = array_merge($array1, $array2);
/**
* array(6) { [0]=> int(0) [1]=> int(1) [2]=> int(2) [3]=> int(3) [4]=> int(4) [5]=> int(5) }
* var_dump($array4); exit;
*/
하지만 여기서 PHP 버전의 8.1 미만인 버전에서는 한 가지 큰 문제점이 생기게 되는데
아래의 예제를 확인해보면 ['key' => 'value'] 를 사용하는 연관 배열에 대해서는 array_merge를 사용했을 때
정상적으로 합쳐지지만 스프레드 연산자를 사용하게 됐을 때는 `string key`를 포함할 수 없다는 오류를 나타냅니다.
PHP 8.1 버전 부터는 PHP RFC를 통과하면서 ['key' => 'value'] (연관 배열)도 사용이 가능해집니다.
<?php
$array1 = [
'lol' => '리그오브레전드',
'blue-archive' => '블루아카이브',
'startcraft' => '스타크래프트'
];
$array2 = [
'overwatch' => '오버워치',
'diablo' => '디아블로'
];
$array3 = array_merge($array1, $array2);
/**
* array(5) { ["lol"]=> string(21) "리그오브레전드" ["blue-archive"]=> string(18) "블루아카이브"
* ["startcraft"]=> string(18) "스타크래프트" ["overwatch"]=> string(12) "오버워치"
* ["diablo"]=> string(12) "디아블로" }
* var_dump($array3); exit;
*/
$array4 = [...$array1, ...$array2];
/**
* Error :: Uncaught Error: Cannot unpack array with string keys
* var_dump($array4); exit;
*/
'언어 & 프레임워크 > PHP' 카테고리의 다른 글
[Laravel] HTTP 예외 처리하기 (0) | 2023.01.04 |
---|---|
[Laravel] window 환경에서 프로젝트 생성 시 에러 (0) | 2022.11.09 |
페이징 성능 개선 - No Offset (0) | 2022.09.26 |
PHP PDO json_encode strings as numbers 반환 오류 (2) | 2022.09.20 |
PHP 오토로드 (AutoLoad) (0) | 2022.09.20 |