Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP strcoll() 함수 완벽 정리: 로케일 기반 문자열 비교 방법

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()로 적절한 로케일을 설정해야 원하는 결과를 얻을 수 있습니다.