PHP의 strcoll() 함수는 시스템의 로케일(locale) 설정을 기준으로 두 문자열을 비교하는 데 사용되는 내장 함수입니다.
참고 − 이 함수는 대소문자를 구분하므로, 비교 시 소문자와 대문자를 서로 다른 문자로 취급합니다.
문법 (Syntax)
strcoll(str1, str2)
매개변수 (Parameters)
str1 − 비교할 첫 번째 문자열입니다.
str2 − 비교할 두 번째 문자열입니다.
반환값 (Return Value)
strcoll() 함수는 두 문자열의 비교 결과에 따라 다음과 같은 정수 값을 반환합니다.
0 − 두 문자열이 동일한 경우
0보다 작은 값 (< 0) − str1이 str2보다 작은 경우
0보다 큰 값 (> 0) − str1이 str2보다 큰 경우
예제 1
다음은 strcoll() 함수의 기본적인 사용 예시입니다.
<?php
setlocale(LC_COLLATE, 'en_US');
echo strcoll("Demo text!", "Demo text!");
?>
출력 결과
0
위 예제에서는 두 문자열이 완전히 같으므로 0이 반환됩니다. 여기서 setlocale(LC_COLLATE, 'en_US')는 문자열 비교 규칙을 미국 영어(en_US) 로케일로 설정하는 부분입니다.
예제 2
이번에는 로케일 설정이 비교 결과에 어떤 영향을 미치는지 확인해 보겠습니다.
<?php
$x = 'a'; $y = 'A';
setlocale(LC_COLLATE, 'de_CH');
print "de_CH: " . strcoll($x, $y) . "\n";
?>
출력 결과
de_CH: 32
스위스 독일어(de_CH) 로케일에서는 소문자 'a'가 대문자 'A'보다 크다고 판단되어 양수인 32가 반환됩니다. 이처럼 strcoll() 함수는 단순 바이트 비교가 아닌, 로케일별 정렬 규칙(collation)에 따라 결과가 달라질 수 있다는 점이 특징입니다.
정리
strcoll() 함수는 다국어 환경에서 문자열 정렬 순서가 로케일마다 다를 때 유용하게 사용됩니다. 예를 들어, 스웨덴어나 독일어처럼 알파벳 정렬 규칙이 표준 ASCII 순서와 다른 언어를 처리할 때 strcmp() 함수 대신 strcoll() 함수를 사용하면 해당 지역의 정렬 관례에 맞는 비교가 가능합니다. 단, 함수 호출 전 반드시 setlocale()로 적절한 로케일을 설정해야 원하는 결과를 얻을 수 있습니다.