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