array_push($arr, $value)는 배열 끝에 값을 추가합니다. 값 하나라면 축약형 $arr[] = $value;가 함수 호출 없이 같은 일을 하며, 대부분의 PHP 코드가 이 방식을 씁니다. 둘 다 원래 배열을 바꿉니다.
array_push()는 배열을 참조로 받으므로 전달한 변수를 수정합니다. 새 요소 개수를 반환하지만 무시해도 됩니다.
array_push와 $arr[] = 비교
값 하나에는 $arr[] = $value를 쓰세요. 더 짧고 함수 호출이 없어서 큰 반복문 안에서는 차이가 쌓입니다. 한 문장으로 여러 값을 추가하거나 값 목록을 펼쳐 넣을 때는 array_push()를 쓰세요.
$arr[] =는 아직 존재하지 않는 변수에도 동작하며, PHP가 배열을 만들어 줍니다. array_push()는 기존 배열이 필요합니다. 정의되지 않은 변수에 쓰면 TypeError: array_push(): Argument #1 ($array) must be of type array, null given을 던집니다.
키와 값 추가하기
array_push()는 다음 정수 키로 값을 덧붙이기만 합니다. 이름 있는 키를 추가하려면 그 키에 대입하세요. 여러 쌍을 한 번에 추가하려면 +=(기존 키 유지)나 array_merge()(새 값이 이김)를 쓰세요.
키가 겹칠 때 +와 array_merge()의 차이는 array_merge 페이지에서 다룹니다.
맨 앞에 추가하기: array_unshift
array_unshift($arr, $value)는 처음에 삽입합니다. 정수 키는 다시 매겨져 새 값이 인덱스 0을 가지며, 문자열 키는 그대로입니다. array_push()처럼 여러 값을 받고 새 개수를 반환합니다.
이름 있는 쌍을 맨 앞에 두려면 새 배열을 만드세요: $menu = ['login' => '/login'] + $menu;.
특정 위치에 삽입하기
array_splice($arr, $offset, 0, $values)는 아무것도 지우지 않고 삽입합니다. $offset에서 시작해 0개의 요소를 지우고 그 자리에 새 값을 넣습니다. 삽입 지점 이후의 정수 키는 다시 매겨집니다.
array_splice()는 요소를 지우고 바꾸는 일도 할 수 있습니다. 그 형태는 요소 제거 페이지에서 볼 수 있습니다.
다른 배열 덧붙이기
array_push($a, $b)는 $b를 중첩된 요소 하나로 추가하는데, 이는 원하는 결과가 아닌 경우가 대부분입니다. $b의 값을 하나씩 추가하려면 펼쳐 넣거나, 스프레드 문법이나 array_merge()로 새 배열을 만드세요.
흔한 실수: 반환값 대입하기
array_push()는 새 요소 개수라는 숫자를 반환합니다. 이를 배열 변수에 다시 대입하면 배열이 정수로 바뀌고, 그 변수에 다음 array_push()를 하면 TypeError가 납니다.
array_unshift()와 true를 반환하는 sort()도 마찬가지입니다. 배열을 직접 바꾸는 함수는 배열이 아니라 상태를 돌려줍니다.
자주 묻는 질문
PHP에서 array_push와 $arr[]의 차이는 무엇인가요?
둘 다 끝에 추가합니다. $arr[] = $x;는 함수 호출 없이 값 하나를 추가하므로 일반적으로 쓰이며 조금 더 빠릅니다. array_push($arr, $a, $b, $c)는 여러 값을 한 번에 추가할 때 편리하고 새 요소 개수를 반환합니다.
PHP에서 배열에 키와 값을 추가하려면 어떻게 하나요?
키에 대입하세요: $arr['color'] = 'blue';. array_push()는 항상 다음 정수 키를 쓰므로 이 일을 할 수 없습니다. 여러 쌍을 한 번에 추가하려면 $arr += ['a' => 1, 'b' => 2];나 array_merge()를 쓰세요.
PHP에서 배열의 맨 앞에 요소를 추가하려면 어떻게 하나요?
array_unshift($arr, $value)를 쓰세요. 정수 키를 다시 매겨 새 값이 인덱스 0을 갖게 하며, 문자열 키는 그대로 유지됩니다.
array_push 후에 배열이 숫자가 되는 이유는 무엇인가요?
array_push()가 배열이 아니라 새 요소 개수를 반환하기 때문입니다. $arr = array_push($arr, 'x');라고 쓰면 배열이 그 숫자로 바뀝니다. 한 줄에 단독으로 호출하세요: array_push($arr, 'x');.