HOWTO · PHP
PHP의 배열에서 중복 값 제거
이 기사에서는 PHP의 배열에서 중복 값을 제거하는 방법을 소개합니다. array_unique() 함수를 포함합니다.
이 페이지의 내용
PHP 배열에서 반복되는 값을 제거하려면 배열을 array_unique()에 전달하세요. 이 함수는 서로 같다고 판단되는 값들 가운데 처음 나온 값을 포함한 배열을 반환합니다. 반환 배열에는 해당 값에 연결된 키도 유지되므로, 중복을 제거해도 숫자 인덱스가 연속되지 않을 수 있습니다.
array_unique()로 중복 값 제거
이 함수는 배열과 선택적 비교 플래그를 받습니다. 기본 형태는 array_unique($array)입니다. 예를 들어 목록에 "red", "blue", "red"가 있으면 반환 배열에는 처음 나온 "red"와 "blue"가 남습니다. 원본 배열은 정렬되지 않으며, 유지된 값의 순서도 바뀌지 않습니다. 중복을 제거한 배열을 계속 사용하려면 반환값을 변수에 할당하세요:
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
$colors = ["red", "blue", "red", "green", "blue"];
$uniqueColors = array_unique($colors);
유지되는 값과 키 이해하기
선택한 플래그에 따라 값이 서로 같다고 판단되면 array_unique()는 처음 만난 값을 유지하고, 나중에 일치하는 값은 제거합니다. 인덱스 배열에서는 항목이 제거된 자리에 키의 공백이 생깁니다. 연관 배열에서는 유지된 각 값에 원래 키가 그대로 연결됩니다. 키가 레코드나 이름을 식별할 때는 유용하지만, 결과의 인덱스가 0, 1, 2, ...라고 가정하는 코드에서는 예상 밖의 결과가 될 수 있습니다.
이 함수는 중복 값을 제거할 뿐, 값이나 키를 기준으로 정렬하지 않습니다. 출력 순서가 중요하다면 유지된 값들이 원래의 상대적 순서를 유지한다는 점을 기억하세요. 원하는 표시 순서가 아니라 어떤 값을 같다고 볼지에 따라 비교 플래그를 선택하세요.
비교 플래그 선택하기
선택적 $flags 인수는 비교 방식을 지정합니다. 기본값인 SORT_STRING은 값을 문자열로 비교합니다. SORT_REGULAR는 PHP의 일반적인 비교를 사용하고, SORT_NUMERIC은 값을 숫자로 비교하며, SORT_LOCALE_STRING은 현재 로케일에 따라 문자열을 비교합니다. 플래그는 어떤 값을 중복으로 판단할지 바꾸지만, 반환 배열을 정렬하지는 않습니다. 따라서 혼합된 자료형은 플래그에 따라 중복 제거 결과가 달라질 수 있습니다. 데이터의 의미에 맞는 방식을 사용하고, 숫자 비교가 값의 순서를 바꿀 것이라고 가정하지 마세요.
필요할 때 결과 재인덱싱하기
후속 코드에서 숫자 키가 연속된 목록이 필요하다면 중복 제거 결과를 array_values()에 전달하세요. 이 함수는 유지된 값의 순서를 보존하면서 숫자 인덱스를 새로 부여한 배열을 만듭니다. 제품 ID나 레이블처럼 키에 의미가 있다면 그대로 유지하고, 사용하는 코드에서 일반 목록을 기대할 때만 재인덱싱하세요. 재인덱싱은 별도의 단계이며 array_unique()가 자동으로 수행하지 않습니다.
PHP 예제로 결과 확인하기
유지되는 값과 재인덱싱의 효과를 확인하려면 다음 전체 예제를 실행하세요:
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
$items = ["first" => "pear", "second" => "plum", "third" => "pear", "fourth" => "lime"];
$uniqueItems = array_unique($items);
$listItems = array_values($uniqueItems);
echo "Unique values with original keys:\n";
print_r($uniqueItems);
echo "Same values with consecutive keys:\n";
print_r($listItems);
첫 번째 결과에는 first, second, fourth 키가 유지되고, 나중에 나온 pear 항목은 제거됩니다. 재인덱싱한 결과에는 같은 값들이 같은 순서로 들어 있으며 숫자 키가 연속됩니다. 이 차이를 이해하면 레코드 키를 유지할지, 일반 숫자 인덱스를 기대하는 코드에 맞춰 목록을 만들지 결정하는 데 도움이 됩니다.