PHP에서는 array_flip 함수를 사용하여 배열의 중복 요소를 간단하게 제거할 수 있습니다. 이 함수는 배열의 키(key)와 값(value)을 서로 뒤바꾸는 역할을 하는데, 이 특성을 활용하면 중복된 값을 자연스럽게 걸러낼 수 있습니다.
예제 코드
<?php
$my_arr = array(45, 65, 67, 99, 81, 90, 99, 45, 68);
echo "원본 배열:\n";
print_r($my_arr);
$my_arr = array_flip($my_arr);
$my_arr = array_flip($my_arr);
$my_arr = array_values($my_arr);
echo "\n중복 요소가 제거된 배열:\n ";
print_r($my_arr);
?>
실행 결과
원본 배열:
Array
(
[0] => 45
[1] => 65
[2] => 67
[3] => 99
[4] => 81
[5] => 90
[6] => 99
[7] => 45
[8] => 68
)
중복 요소가 제거된 배열:
Array
(
[0] => 45
[1] => 65
[2] => 67
[3] => 99
[4] => 81
[5] => 90
[6] => 68
)
동작 원리
먼저 배열을 정의한 뒤, array_flip 함수를 호출하여 키와 값을 서로 뒤집습니다. 이 과정에서 기존의 값들이 새로운 키(인덱스)가 되는데, 배열의 키는 반드시 고유해야 하기 때문에 중복된 값은 하나만 남게 됩니다.
이후 array_flip 함수를 한 번 더 실행하여 원래의 키-값 구조로 되돌리고, 마지막으로 array_values 함수를 적용해 인덱스를 0부터 시작하는 연속된 숫자로 재정렬합니다. 그 결과 위 출력과 같이 중복 없이 깔끔하게 정리된 배열을 얻을 수 있습니다.
대안: array_unique 함수
PHP에서는 array_unique 함수를 통해서도 동일한 결과를 얻을 수 있습니다. 이 함수는 배열 내 중복된 값을 제거하고 고유한 값만 남겨주며, 코드가 더 직관적이라는 장점이 있습니다.
<?php
$my_arr = array(45, 65, 67, 99, 81, 90, 99, 45, 68);
$result = array_values(array_unique($my_arr));
print_r($result);
?>
다만 array_unique는 내부적으로 모든 요소를 비교하는 방식으로 동작하기 때문에, 대규모 배열에서는 array_flip을 두 번 사용하는 방식이 더 빠른 성능을 보이는 경우도 있습니다. 상황에 맞게 적절한 방법을 선택하시기 바랍니다.