문자열 비교는 모든 프로그래밍 언어의 문자열 처리 기능에서 중요한 기능 중 하나입니다. 비교를 위해 비교 연산자(==, < 또는 >)를 사용하는 것 외에도 PHP는 PHP가 보다 복잡한 문자열 비교를 수행할 수 있도록 하는 일련의 비교 함수를 제공합니다. strcmp(), strcasecmp() 및 strnatcmp()와 같은 함수.
1. 바이트 순서로 문자열 비교
문자열을 바이트 순서로 비교하려면 strcmp()와 strcasecmp()라는 두 함수를 사용할 수 있습니다. strcasecmp() 함수는 비교를 위해 문자열에서 문자의 대소문자를 무시할 수 있습니다. 이 두 함수의 프로토타입은 다음과 같습니다.
in strcmp(string str1,string str2) //문자열의 문자를 대소문자를 구분하여 비교합니다
int strcasecmp(string str1,string str2) //문자열의 대소문자 비교를 무시합니다
이 두 함수의 사용법은 비슷하며 둘 다 비교를 위해 두 개의 문자열 매개변수를 전달해야 합니다. 두 문자열 중 첫 번째 바이트부터 입력 문자열 str1과 str2를 비교할 수 있으며, 두 문자열이 동일할 경우 비교가 완료될 때까지 다음 바이트로 비교가 진행됩니다. 다음 세 가지 값 중 하나를 반환합니다.
★str1이 str2와 같으면 0이 반환됩니다.
★str1이 str2보다 크면 1을 반환합니다.
★str1이 str2보다 작으면 -1을 반환합니다.
다음 프로그램에서 비교되는 두 문자열의 크기는 비교 후 반환된 값에 따라 결정됩니다. 문자열에서 대문자와 소문자를 구별하려면 strcmp() 함수를 사용하고, 문자열에서 문자의 대소문자 비교를 무시하려면 strcasecmp() 함수를 사용하십시오. 물론 실질적인 의미는 없습니다. 코드는 다음과 같습니다.
$username = "관리자";
$password = "램프브라더";
//대소문자를 구분하지 않는 비교, 두 문자열이 같으면 0을 반환합니다
if(strcasecmp($userName,"admin")== 0){
echo "사용자 이름이 존재합니다";
}
//비교된 두 문자열의 해당 함수를 모두 대문자 또는 모두 소문자로 변환한 후 대소문자를 구분하지 않는 비교도 수행할 수 있습니다
if(strcasecmp(strtolower($userName),strtolower("admin")) == 0){
echo "사용자 이름이 존재합니다";
}
// 문자열의 대소문자 구분 비교
스위치(strcmp($password,"lampbrother")){
사례 0:
echo "두 문자열은 같습니다
" break;
사례 1:
echo "첫 번째 문자열이 두 번째 문자열보다 큽니다
" break;
사례 -1:
echo "첫 번째 문자열이 두 번째 문자열보다 작습니다
" break;
}
?>
2. 자연순서에 따른 문자열 비교
PHP는 바이트의 사전 순서에 따른 비교 외에도 "자연 정렬" 방법에 따른 문자열 비교도 제공합니다. 소위 자연 정렬이란 사람들의 일상 생활에서의 사고 습관에 따라 정렬하는 것, 즉 문자열의 숫자 부분을 숫자 크기에 따라 비교하는 것을 말합니다. 예를 들어, "4"는 "33"의 첫 번째 문자보다 크고 자연 정렬 규칙에 따르면 "33"은 "4"보다 크기 때문에 바이트 단위로 비교할 때 "4"는 "33"보다 큽니다. 자연 정렬에서 두 문자열을 비교하려면 strnatcmp() 함수를 사용하십시오. 이 함수는 대소문자를 구분하며 사용 형식은 strcmp() 함수와 유사합니다.
다음 예에서는 버블 정렬을 사용하여 두 가지 비교 방법을 통해 배열의 숫자로 파일 이름을 정렬합니다. 코드는 다음과 같습니다.
//숫자 값을 포함하는 배열 정의
$files = array("file11.txt","file22.txt","file1.txt","file2.txt");
함수 mySort($arr,$select = false){
for($i=0;$i
for($j;$j
//두 번째 매개변수가 true이면 strcmp() 함수를 사용하여 크기를 비교합니다
if($select){
// 두 값의 비교 결과가 0보다 크면 위치가 바뀐다
If(strcmp($arr[$j],$arr[j 1])>0){
$tmp = $arr[$j];
$arr[$j] = $arr[$j 1];
$arr[$j 1] = $tmp;
}
//두 번째 매개변수가 false인 경우 strnatcmp() 함수를 사용하여 크기 비교
}그밖에{
// 비교 결과가 0보다 크면 위치를 바꿉니다
If(strnatcmp($arr[$j],$arr[$j 1])>0){
$tmp = $arr[$j];
$arr[$j] = $arr[$j 1];
$arr[$j 1] = $tmp;
}
}
}
}
return $arr; //정렬된 배열
}
print_r(mySort($files,true)); //사전 순서로 정렬하려면 선택하세요: file1.txt file11.txt file2.txt file22.txt
print_r(mySort($files,false)); //자연순으로 정렬하려면 선택하세요: file1.txt file2.txt file11.txt file22.txt
?>
PHP는 이 함수의 대소문자 무시 버전도 제공합니다. strnatcasecmp() 함수는 strnatcmp() 함수와 동일한 방식으로 사용됩니다.