Menu

PHP 배열 요소 삭제: unset, array_splice

unset($array[$key])는 키로 요소를 지우고, array_splice는 위치로 지우면서 번호를 다시 매기며, array_diff는 값으로 지웁니다. 각 방법과 삭제 후 인덱스 재정렬, 엉뚱한 요소를 지우는 array_search 함정을 알아봅니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

PHP 배열에서 키로 요소를 지우려면 unset($array[$key])를 쓰세요. 요소가 사라지고 다른 키는 그대로 유지되며, 없는 키를 unset해도 에러가 아닙니다.

두 번째 결과를 보세요. 키가 이제 0, 2, 3입니다. unset은 번호를 다시 매기지 않습니다.

unset 후 배열 인덱스 다시 매기기

키에 빈틈이 있는 리스트는 나중에 문제를 일으킵니다. for ($i = 0; ...) 반복문은 없는 인덱스에 걸리고, json_encode는 배열 대신 JSON 객체를 씁니다. array_values()가 깔끔한 키를 다시 줍니다.

array_splice로 위치 기준 삭제

array_splice($array, $offset, $length)는 $offset 위치부터 $length개의 요소를 지우고, 키를 다시 매기며, 지운 것을 반환합니다. 음수 오프셋은 끝에서부터 셉니다. 같은 호출에서 대체 요소를 삽입할 수도 있습니다.

array_splice는 키가 아니라 위치로 동작합니다. 연관 배열에서는 순서상의 자리로 지우고 문자열 키는 유지합니다. 원본을 바꾸지 않고 일부를 복사하는 array_slice와의 비교는 array_slice 페이지에 있습니다.

값으로 요소 삭제하기

array_diff($array, [$value])는 $value와 같은 모든 요소를 뺀 배열을 반환하며, 나머지의 키는 유지합니다. 첫 번째 일치만 지우려면 array_search로 키를 찾아 unset하세요.

array_diff는 값을 문자열로 비교하므로 array_diff([1, "1", 2], [1])은 정수와 문자열을 모두 지웁니다. 조건이 "이 값과 같다" 이상이라면 콜백과 함께 array_filter를 쓰세요.

첫 번째나 마지막 요소 삭제하기

array_shift()는 첫 번째 요소를, array_pop()은 마지막 요소를 지웁니다. 둘 다 지운 요소를 반환하므로 큐와 스택에 편리합니다.

array_shift는 숫자 키를 0부터 다시 매깁니다. array_pop은 빈틈이 끝에 생기므로 그럴 필요가 없습니다.

여러 키를 한 번에 삭제하기

unset은 한 번의 호출에 여러 요소를 받습니다. 배열에 담긴 키 목록을 지우려면 array_flip()으로 뒤집어 이름을 키로 만든 다음 array_diff_key()에 넘기세요.

흔한 실수: 값이 없을 때 array_search와 unset

array_search는 아무것도 찾지 못하면 false를 반환하고, 배열 키로 쓰인 false는 0이 됩니다. 그래서 이 줄은 값이 배열에 없을 때마다 첫 번째 요소를 지웁니다.

array_search의 결과는 항상 저장하고, 키로 쓰기 전에 !== false와 비교하세요. 단순한 if ($key)로도 부족합니다. 인덱스 0에서 일치한 경우도 거짓으로 취급되기 때문입니다.

자주 묻는 질문

PHP에서 값으로 배열 요소를 삭제하려면 어떻게 하나요?

모든 일치를 지우려면 array_diff($arr, ['value'])를 쓰세요. 첫 번째 것만 지우려면 키를 찾고, 찾았는지 확인한 뒤 unset하세요: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.

unset 후에 배열의 인덱스를 다시 매기려면 어떻게 하나요?

array_values()로 감싸세요. $arr = array_values($arr);는 키를 0부터 다시 매깁니다. 또는 번호를 알아서 다시 매기는 array_splice($arr, $index, 1)로 요소를 지우세요.

배열의 첫 번째나 마지막 요소를 삭제하려면 어떻게 하나요?

array_shift($arr)는 첫 번째 요소를 지우고 반환하며 숫자 키를 다시 매깁니다. array_pop($arr)는 마지막 요소를 지우고 반환합니다.

foreach 반복문 안에서 요소를 unset해도 되나요?

네. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } }는 안전합니다. foreach는 배열의 복사본을 순회하고 여러분은 원본을 바꾸기 때문입니다. 키에 빈틈이 남으므로 리스트가 필요하면 그 뒤에 array_values()를 호출하세요.

없는 키를 unset하면 에러가 나나요?

아니요. unset($arr['missing'])은 아무것도 하지 않고 경고도 내지 않으므로 먼저 isset으로 확인할 필요가 없습니다.

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기