PHP에서 배열의 특정 요소를 삭제하려면 unset() 함수를 사용하면 됩니다. 다만 unset()은 해당 요소만 제거할 뿐, 나머지 요소들의 인덱스를 자동으로 재조정하지 않습니다. 따라서 인덱스를 0부터 연속된 형태로 되돌리려면 array_values() 함수를 함께 사용해야 합니다.
예제 코드
<?php
$my_arr = array('this', 'is', 'a', 'sample', 'only');
echo "원본 배열: ";
var_dump($my_arr);
// 인덱스 4의 요소 삭제
unset($my_arr[4]);
// 인덱스 재정렬
$my_arr_2 = array_values($my_arr);
echo "삭제 및 재정렬 후 배열: ";
var_dump($my_arr_2);
?>
실행 결과
원본 배열: array(5) {
[0]=>
string(4) "this"
[1]=>
string(2) "is"
[2]=>
string(1) "a"
[3]=>
string(6) "sample"
[4]=>
string(4) "only"
}
삭제 및 재정렬 후 배열: array(4) {
[0]=>
string(4) "this"
[1]=>
string(2) "is"
[2]=>
string(1) "a"
[3]=>
string(6) "sample"
}
동작 방식 설명
먼저 문자열 값 5개를 담은 배열을 선언하고 var_dump()로 전체를 출력합니다. 이후 unset($my_arr[4])를 호출하면 인덱스 4에 있던 'only' 요소가 제거되지만, 배열의 크기가 줄어들어도 나머지 키(0~3)는 그대로 유지됩니다.
array_values()는 배열의 모든 값을 꺼내 0부터 시작하는 새로운 숫자 인덱스를 부여한 배열을 반환합니다. 이 덕분에 중간에 비어 있는 인덱스 없이 깔끔하게 재정렬된 배열을 얻을 수 있습니다.
참고: array_splice()를 활용한 대안
삭제와 재인덱싱을 한 번에 처리하고 싶다면 array_splice() 함수를 사용하는 것도 좋은 방법입니다.
<?php
$my_arr = array('this', 'is', 'a', 'sample', 'only');
array_splice($my_arr, 4, 1); // 인덱스 4에서 1개 요소 삭제 후 자동 재인덱싱
?>
array_splice()는 지정한 오프셋의 요소를 제거하면서 남은 요소들의 인덱스를 자동으로 다시 매겨주므로, 별도로 array_values()를 호출할 필요가 없다는 장점이 있습니다.