PHP 배열에서 마지막 등장 요소만 남기고 중복 제거하기

PHP 배열에서 중복된 요소를 제거하면서 마지막에 등장한 요소만 유지하는 방법에 대해 알아보겠습니다. 내장 함수인 array_unique()는 기본적으로 첫 번째 등장 요소를 유지하기 때문에, 원하는 결과를 얻기 위해서는 추가적인 처리가 필요합니다.

PHP 배열은 키-값 쌍의 모음입니다. array_unique() 함수가 첫 번째 등장 요소를 유지하는 이유는 값 자체를 기준으로 중복을 판단하기 때문입니다. 따라서 마지막 등장 요소를 유지하려면, 배열을 뒤집는 기법을 활용하는 것이 효과적입니다.

배열 뒤집기를 이용한 방법

배열을 뒤집은 후 array_unique() 함수를 적용하고, 다시 배열을 뒤집으면 마지막 등장 요소만 남게 됩니다. 이 방법은 코드가 간결하다는 장점이 있습니다.


 50 [1] => 10 [2] => 30 [3] => 40 [4] => 20 )

?>

위 예제에서는 array_reverse() 함수를 두 번 사용하여 array_unique() 함수의 동작 방식을 역이용했습니다. 이는 직관적이면서도 효과적인 방법입니다.

보조 배열을 이용한 방법

또 다른 방법은 보조 배열을 사용하여 각 요소의 마지막 등장 위치를 추적하는 것입니다. 이 방식은 배열을 여러 번 뒤집는 오버헤드를 줄일 수 있어, 대규모 배열 처리 시 성능 향상을 기대할 수 있습니다.


 $value) {
        // 해당 값이 아직 보조 배열에 없다면, 마지막 등장 요소입니다.
        if (!isset($lastSeenKeys[$value])) {
            $lastSeenKeys[$value] = true; // 해당 값이 마지막으로 등장했음을 표시
            $finalResult[] = $value;      // 결과 배열에 추가
        }
    }

    // 결과 배열을 다시 뒤집어 원래 순서에 맞춥니다.
    return array_reverse($finalResult);
}

$sampleArray = [10, 20, 20, 30, 40, 40, 50, 10, 30];
$result = filterLastUniqueEfficient($sampleArray);

print_r($result);
// 출력: Array ( [0] => 50 [1] => 10 [2] => 30 [3] => 40 [4] => 20 )

?>

이 방법은 $lastSeenKeys라는 보조 공간을 사용하지만, 반복적인 배열 뒤집기 연산을 줄여 효율성을 높일 수 있습니다. 어떤 방법을 선택할지는 처리할 데이터의 크기와 성능 요구사항에 따라 달라질 수 있습니다. 작은 배열에는 첫 번째 방법이 간결하며, 큰 배열에는 두 번째 방법이 더 효율적일 수 있습니다.

태그: PHP 배열 중복제거 array_unique algorithm

8월 2일 08:29에 게시됨