정의 및 사용 방법
- PHP 버전
- 4.0.1+
array_unique() 함수는
주어진 배열 내의 중복된 값들을 제거하고 고유한(unique) 값만 남긴 새로운 배열을 반환합니다.
이 함수는 배열에 동일한 값이 여러 번 존재하는 경우 처음 등장하는 값만 유지하고 나머지 값은 제거한 새로운 배열을 반환하는 함수입니다.
특징
- 주어진 원본 배열은 그대로 유지됩니다.
array_unique()함수로 반환되는 새로운 배열에서는 주어진 입력 배열의 키를 보존합니다.- 즉, 반환되는 새로운 배열에서 중복된 값이 제거되더라도 원래 배열에 있었던 키는 그대로 유지됩니다.
기본 예제
$array = [1, 2, 3, 1, 2, 4];
$unique_array = array_unique($array);
// 원본 배열은 그대로 유지하고 새로운 배열을 반환
print_r($unique_array);
Array
(
[0] => 1
[1] => 2
[2] => 3
[5] => 4
)
구문
array_unique(array $array, int $flags = SORT_STRING): array
매개변수
$array |
필수. 중복된 값을 제거하려는 배열입니다. |
|---|---|
$flags |
옵션. 중복 요소를 비교하는 방법을 지정하는 플래그입니다.
다음과 같은 플래그를 사용할 수 있습니다.
|
참고: SORT_LOCALE_STRING : 현재 로케일(locale)을 기반으로 문자열 비교
현재 설정된 로케일(locale) 설정을 기반으로 비교하는 것을 의미합니다. 로케일은 언어, 국가 및 기타 지역 특성에 따라 정렬 및 비교 규칙을 정의합니다. 예를 들어, 특정 언어에서는 대소문자를 구분, 특수 문자가 포함된 문자의 구분 등이 있으며, 이러한 차이를 반영하여 문자열을 비교하는 것입니다.
반환 값
- 배열에 동일한 값이 여러 번 존재하는 경우 처음 등장하는 값만 유지하고 나머지는 제거한 고유한(unique) 값만 남긴 배열을 반환합니다.
- 중복된 값이 제거되더라도 원래 배열의 키는 그대로 유지됩니다.
변경 이력
| 버전 | 설명 |
|---|---|
| 7.2.0 | $flags가 SORT_STRING인 경우, PHP 7.2.0 이전 버전에서는 기존 배열을 복사한 후 중복된 요소를 제거했으며, 이 과정에서 배열을 다시 압축하지 않았습니다. 하지만 PHP 7.2.0부터는 중복되지 않은 요소만 추가하여 새로운 배열을 생성하는 방식으로 변경되었습니다. 이 변경으로 인해 결과 배열의 숫자 인덱스가 이전 버전과 달라질 수 있습니다. |
array_unique() 처리 방식 차이
$a = [0, 0];
$b = array_unique($a, SORT_STRING);
// 새로운 요소를 추가해 봅니다.
$b[] = 1;
print_r($b);
/* --------------------------------------------------
* [PHP 7.2.0 이전 버전 출력 결과]
*
* Array
* (
* [0] => 0
* [2] => 1 <-- 삭제된 요소의 영향으로 다음 숫자 인덱스가 2가 됨
* )
*
* [설명]
* 기존 배열에서 중복된 요소를 제거하는 방식으로 처리했기 때문에,
* 삭제된 요소의 숫자 인덱스 정보가 남아 새로운 요소는 2번 인덱스에 추가됩니다.
* -------------------------------------------------- */
/* --------------------------------------------------
* [PHP 7.2.0 버전부터 출력 결과]
*
* Array
* (
* [0] => 0
* [1] => 1 <-- 새로운 배열 구성으로 다음 숫자 인덱스가 1이 됨
* )
*
* [설명]
* 중복되지 않은 요소만 추가하여 새로운 배열을 구성하는 방식으로
* 변경되어 새로운 요소는 1번 인덱스에 추가됩니다.
* -------------------------------------------------- */
중복 요소를 비교하는 방법에 따른 반환 값
대소문자 구분
array_unique() 함수는 대소문자를 구분합니다.
$array = ['a', 'b', 'c', 'A', 'B', 'C'];
$unique_array = array_unique($array);
print_r($unique_array );
/*
Array (
[0] => a
[1] => b
[2] => c
[3] => A
[4] => B
[5] => C
)
*/
숫자와 문자열 구분
숫자와 문자열 구분을 중복 요소를 비교하는 방법을 지정하는 이 함수의 두 번째 매개 변수인 $flags를 통해 알아보겠습니다.
$array = [1, 2, 01, 03, '1', '2', '01', '02'];
/*
* SORT_REGULAR
* array_unique($array, SORT_REGULAR)
*
* [설명]
* 데이터 유형을 변경하지 않고 비교합니다(느슨한 비교 == 적용).
*
* 정수 1과 문자열 '1'은 서로 같은 값으로 평가되므로
* 문자열 '1'은 중복으로 제거됩니다.
*
* 문자열 '01'과 '02'도 숫자 값과 비교되어
* 각각 정수 1과 2와 같은 값으로 평가되므로 중복으로 제거됩니다.
*/
$sort_regular = array_unique($array, SORT_REGULAR);
var_dump($sort_regular);
/*
array(3) {
[0]=> int(1)
[1]=> int(2)
[3]=> int(3)
}
*/
/*
* SORT_NUMERIC
* array_unique($array, SORT_NUMERIC)
*
* [설명]
* 모든 요소를 숫자 데이터 유형으로 변환한 후 비교합니다.
*
* 문자열 '01'과 '02'도 숫자 1과 2로 변환되므로
* 기존 숫자 1, 2와 중복되어 제거됩니다.
*/
$sort_numeric = array_unique($array, SORT_NUMERIC);
var_dump($sort_numeric);
/*
array(3) {
[0]=> int(1)
[1]=> int(2)
[3]=> int(3)
}
*/
/*
* SORT_STRING
* array_unique($array, SORT_STRING) - 기본값
*
* [설명]
* 모든 요소를 문자열 데이터 유형으로 변환한 후 비교합니다.
*
* 정수 1은 문자열 "1"로 변환되어 문자열 '1'과 같은 값으로 평가되므로
* 중복으로 제거됩니다.
*
* 반면 문자열 '01'은 "01" 그대로 비교되므로
* "1"과 다르게 취급되어 유지됩니다.
*/
$sort_string = array_unique($array, SORT_STRING);
var_dump($sort_string);
/*
array(5) {
[0]=> int(1)
[1]=> int(2)
[3]=> int(3)
[6]=> string(2) "01"
[7]=> string(2) "02"
}
*/
연관 배열에서의 반환 값
연관 배열은 각 요소에 문자열 또는 정수가 아닌 사용자가 지정한 키를 사용하여 접근할 수 있는 배열입니다.
이러한 키-값 쌍은 배열의 요소를 식별하는 데 사용됩니다.
array_unique() 함수를 사용해서 중복된 값을 제거할 때 키가 아닌 값을 기준으로 비교합니다.
$array = [
'a' => 'green',
'b' => 'green',
'c' => 'orange'
];
$result = array_unique($array);
print_r($result);
/*
Array (
[a] => green
[c] => orange
)
*/
혼합 배열에서의 반환 값
인덱스 배열과 연관 배열이 함께 있는 경우, 이를 "혼합 배열(Mixed Array)"이라고 합니다.
혼합 배열은 숫자로 된 인덱스와 문자열로 된 키를 모두 가지는 배열을 나타냅니다. 이러한 배열은 PHP에서 다양한 데이터 구조를 표현할 때 사용됩니다.
array_unique() 함수를 사용해서 중복된 값을 제거할 때 인덱스 배열이나 연관 배열도 키가 아닌 값을 기준으로 비교합니다.
$array = [
'a' => 'green',
'red',
'b' => 'green',
'blue',
'red'
];
$result = array_unique($array);
print_r($result);
/*
Array (
[a] => green
[0] => red
[1] => blue
)
*/
같이 보기
- PHP array_count_values() 함수 – 배열에서 값들의 등장 횟수 계산하기
- PHP array_sum() 함수 – 배열 요소의 합계 계산하기
- PHP array_diff() 함수 – 다른 배열에 없는 값 찾기
- PHP array_diff_assoc() 함수 – 키를 기준으로 다른 배열에 없는 값 찾기
- PHP array_intersect_assoc() 함수 – 키와 값을 기준으로 다른 배열과의 공통 요소 찾기
- PHP array_search() 함수 - 배열에서 값 검색하기
- PHP array_column() 함수 – 다차원 배열에서 특정 컬럼 키의 값 반환