Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 배열에서 요소를 삭제하고 인덱스를 재정렬하는 방법

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()를 호출할 필요가 없다는 장점이 있습니다.