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

PHP 배열에서 특정 인덱스의 객체(요소) 제거하는 방법 – unset() 함수 완벽 가이드

PHP에서 배열에 저장된 객체나 요소를 제거할 때는 unset() 함수를 사용합니다. 이 함수는 지정한 인덱스의 요소를 배열에서 완전히 삭제하며, 별도의 반환값 없이 원본 배열을 직접 수정한다는 특징이 있습니다.

unset() 함수로 배열 요소 제거하기

아래 예제에서는 4개의 요소를 가진 배열에서 인덱스 2번 위치의 항목을 제거하는 과정을 보여줍니다.

예제 코드

$index = 2;
$objectarray = array(
    0 => array('label' => 'abc', 'value' => 'n23'),
    1 => array('label' => 'def', 'value' => '2n13'),
    2 => array('label' => 'abcdef', 'value' => 'n214'),
    3 => array('label' => 'defabc', 'value' => '03n2')
);
var_dump($objectarray);
foreach ($objectarray as $key => $object) {
    if ($key == $index) {
        unset($objectarray[$index]);
    }
}
var_dump($objectarray);

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

array(4) { [0]=> array(2) { ["label"]=> string(3) "abc" ["value"]=> string(3) "n23" } [1]=> array(2) 
{ ["label"]=> string(3) "def" ["value"]=> string(4) "2n13" } [2]=> array(2) { ["label"]=> string(6) 
"abcdef" ["value"]=> string(5) "n214" } [3]=> array(2) { ["label"]=> string(6) "defabc" ["value"]=> 
string(5) "03n2" } } array(3) { [0]=> array(2) { ["label"]=> string(3) "abc" ["value"]=> string(3) 
"n23" } [1]=> array(2) { ["label"]=> string(3) "def" ["value"]=> string(4) "2n13" } [3]=> array(2) 
{ ["label"]=> string(6) "defabc" ["value"]=> string(5) "03n2" } }

코드 동작 원리 설명

먼저 4개의 객체(연관 배열)를 담고 있는 배열을 선언하여 변수 $objectarray에 할당합니다. 그리고 제거하고자 하는 대상의 인덱스 값인 2를 변수 $index에 미리 저장해 둡니다.

이후 foreach 반복문을 사용해 배열의 모든 요소를 순회하면서, 현재 순회 중인 키($key)가 제거하려는 인덱스 값과 일치하는지 확인합니다. 조건이 일치하면 해당 시점에 unset() 함수를 호출하여 그 요소를 배열에서 삭제합니다.

주의할 점: 인덱스 재정렬 문제

실행 결과를 자세히 보면 알 수 있듯이, unset()으로 요소를 삭제하면 나머지 요소들의 인덱스가 자동으로 재정렬되지 않습니다. 위 예제에서도 인덱스 2가 사라진 후 배열은 [0], [1], [3] 구조를 유지합니다.

만약 삭제 후 인덱스를 0부터 연속적으로 다시 정렬하고 싶다면, unset() 호출 이후 array_values() 함수를 사용하면 됩니다.

$objectarray = array_values($objectarray); // 인덱스를 0부터 재정렬

마무리

정리하면, PHP에서 배열의 특정 인덱스 요소를 제거하는 절차는 다음과 같습니다.

1. 제거할 요소의 인덱스를 변수에 저장합니다.
2. foreach 반복문으로 배열을 순회하며 해당 인덱스와 일치하는지 검사합니다.
3. 일치하는 요소에 대해 unset() 함수를 호출하여 삭제합니다.
4. 필요하다면 array_values()로 인덱스를 재정렬합니다.

이 방법은 단순 배열뿐만 아니라 객체를 담은 배열에서도 동일하게 적용할 수 있어, 실무에서 데이터 필터링이나 목록 관리 로직을 구현할 때 매우 유용하게 활용됩니다.