9.4 字符串比較函數(shù)
PHP中,有多種方法可以對(duì)字符串進(jìn)行比較,除了可以直接使用條件運(yùn)算符(<, >, ==)加以比較外。
按字節(jié)進(jìn)行字符串的比較
strcmp();(整個(gè)比較是否相同)
strncmp();(指定比較長(zhǎng)度的字符串比較)
strcasecmp(); (不區(qū)分大小寫(xiě)的全串比較)
<?php
$userName = "Admin"; //聲明一個(gè)字符串作為用戶(hù)名
//if(strcasecmp($userName, “admin”) == 0) { //不區(qū)分大小寫(xiě)地比較,相等返回0
if( strcasecmp(strtolower($userName), strtolower(“admin”)) == 0 ) { //采用統(tǒng)一小寫(xiě)后比較
echo "用戶(hù)名存在";
}
switch(strcmp($ userName, “admin")) { //區(qū)分字符串中字母的大小寫(xiě)比較
case 0: echo "兩個(gè)字符串相等<br>"; break; //兩個(gè)字符串相等則返回0
case 1: echo "第一字串大于第二字串<br>"; break; //第一個(gè)字符串大時(shí)則返回1
case -1: echo "第一字串小于第二字串<br>"; break; //第一個(gè)字符串小時(shí)則返回-1
}
strnatcmp — 使用自然排序算法比較字符串
格式:int strnatcmp ( string $str1 , string $str2 )
該函數(shù)實(shí)現(xiàn)了以人類(lèi)習(xí)慣對(duì)數(shù)字型字符串進(jìn)行排序的比較算法,這就是“自然順序”。注意該比較區(qū)分大小寫(xiě)。
與其他字符串比較函數(shù)類(lèi)似,如果 str1 小于 str2,返回負(fù)數(shù);如果 str1 大于 str2,返回正數(shù);二者相等則返回 0。
<?php
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
echo “使用strcmp排順序后:\n";
usort($arr1, "strcmp");
print_r($arr1);
//[0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png
echo “\n 使用strnatcmp排序后:\n";
usort($arr2, "strnatcmp");
print_r($arr2);
//[0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png
?>
equals.php
<?php
/* 1. 使用等號(hào)比較字符串(常見(jiàn))
*
* 注意: 如果是不區(qū)分大小寫(xiě)的進(jìn)行比較,兩個(gè)比較的字符串要么都轉(zhuǎn)成大寫(xiě), 要么都轉(zhuǎn)成小寫(xiě)
*
*
*/
$str1 = "abc";
$str2 = "Abc";
if( strtoupper($str1) == strtoupper($str2) ) {
echo "相等";
} else {
echo "不相等";
}
strcasecmp.php
<?php
/* 1. 使用等號(hào)比較字符串(常見(jiàn))
*
* 注意: 如果是不區(qū)分大小寫(xiě)的進(jìn)行比較,兩個(gè)比較的字符串要么都轉(zhuǎn)成大寫(xiě), 要么都轉(zhuǎn)成小寫(xiě)
*
*
*/
$str1 = "abc";
$str2 = "Bbc";
switch(strcasecmp($str1, $str2)) {
case 0:
echo "第一個(gè)字符串$str1 等于 第二個(gè)字符串 $str2"; break;
case -1:
echo "第一個(gè)字符串$str1 小于 第二個(gè)字符串 $str2"; break;
case 1:
echo "第一個(gè)字符串$str1 大于 第二個(gè)字符串 $str2"; break;
}
strcmp.php
<?php
/* 1. 使用等號(hào)比較字符串(常見(jiàn))
*
* 注意: 如果是不區(qū)分大小寫(xiě)的進(jìn)行比較,兩個(gè)比較的字符串要么都轉(zhuǎn)成大寫(xiě), 要么都轉(zhuǎn)成小寫(xiě)
*
*
*/
$str1 = "abc";
$str2 = "Abc";
switch(strcmp($str1, $str2)) {
case 0:
echo "第一個(gè)字符串$str1 等于 第二個(gè)字符串 $str2"; break;
case -1:
echo "第一個(gè)字符串$str1 小于 第二個(gè)字符串 $str2"; break;
case 1:
echo "第一個(gè)字符串$str1 大于 第二個(gè)字符串 $str2"; break;
}
test.php
<?php
/* 1. 使用等號(hào)比較字符串(常見(jiàn))
*
* 注意: 如果是不區(qū)分大小寫(xiě)的進(jìn)行比較,兩個(gè)比較的字符串要么都轉(zhuǎn)成大寫(xiě), 要么都轉(zhuǎn)成小寫(xiě)
*
* 2. 字符比較
* strcmp()
* strcasecmp()
*
* 3. 按自然順序比較
* strnatcmp()
* strnatcasecmp();
*
*
*/
$arr = array("File1.txt", "file2.txt", "file11.txt", "file12.txt");
usort($arr, "strnatcasecmp");
print_r($arr);