strcmp
二进制安全字符串比较
int strcmp ( string $str1 , string $str2 )
如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
注意
注意该比较区分大小写。
示例
<?php echo strcmp("Hello", "hello"); // -1 echo strcmp("5", 5); // 0 echo strcmp("15", 0xf); // 0 echo strcmp(61529519452809720693702583126814, 61529519452809720000000000000000); //0 echo strcmp(NULL, false); // 0 echo strcmp(NULL, ""); // 0 echo strcmp(NULL, 0); // -1 echo strcmp(false, -1); // -2 echo strcmp("15", NULL); // 2 echo strcmp(NULL, "foo"); // -3 echo strcmp("foo", NULL); // 3 echo strcmp("foo", false); // 1 echo strcmp("foo", 5); // 1 /* NULL + PHP Warning strcmp() expects parameter 2 to be string, array given in ... */ echo strcmp("foo", array()); /* NULL + PHP Warning strcmp() expects parameter 2 to be string, object given in ... */ echo strcmp("foo", new stdClass); /* NULL + PHP Warning strcmp() expects parameter 1 to be string, object given in ... */ echo strcmp(function(){}, "");
这里会有同学有疑问,其他的还可以理解,但是
strcmp(61529519452809720693702583126814, 61529519452809720000000000000000); //0
比较结果竟然是相等,那么PHP内部是怎么执行的呢?
原来在PHP内部s1和s2 都被转为了 "6.152951945281E+31" 来比较的,有效数字为前13位,所以相等。
strncmp
二进制安全比较字符串开头的若干个字符
int strncmp ( string $str1 , string $str2 , int $len )
该函数与 strcmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度
返回值
如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
注意
注意该比较区分大小写。
示例
echo strncmp("xybc","a3234",0); // 0 echo strncmp("abcdef","abc",3); // 0 echo strncmp("abcdef","abc",4); // 1
strcasecmp
二进制安全比较字符串(不区分大小写)
int strcasecmp ( string $str1 , string $str2 )
该函数与 strcmp() 函数类似,不同之处在于不区分大小写,其他可参考 strcmp()
返回值
如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
示例
echo strcasecmp("Hello","hello"); // 0
strncasecmp
二进制安全比较字符串(不区分大小写)
int strncasecmp ( string $str1 , string $str2 , int $len )
该函数与 strcasecmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度
该函数与 strncmp() 也类似,不同之处在于不区分大小写
返回值
如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
示例
echo strncasecmp("Hello","hello", 5); // 0 echo strncasecmp("abcdef","ABC",3); // 0
strnatcmp
使用自然排序算法比较字符串
int strnatcmp ( string $str1 , string $str2 )
该函数实现了以人类习惯对数字型字符串进行排序的比较算法,这就是“自然顺序”。
返回值
与其他字符串比较函数类似,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
注意
注意该比较区分大小写。
示例
//我们来测试一下什么是“以人类习惯” echo strnatcmp("img10.png","img2.png"); // 1 说明该函数认为 img10.png 大于 img2.png 与人类习惯一致 echo strcmp("img10.png","img2.png"); // -1 说明该函数认为 img10.png 小于 img2.png,计算机思维
//在来看一个更直观的例子 echo '<pre>'; $arr1 = $arr2 = array( "img1.png", "img2.png", "img10.png", "img01.png", "img100.png", "img20.png", "img30.png", "img200.png"); echo "标准字符串比较"."<br>"; usort($arr1,"strcmp"); print_r($arr1); echo "自然序列字符串比较"."<br>"; usort($arr2,"strnatcmp"); print_r($arr2); /* 标准字符串比较Array ( [0] => img01.png [1] => img1.png [2] => img10.png [3] => img100.png [4] => img2.png [5] => img20.png [6] => img200.png [7] => img30.png ) 自然序列字符串比较Array ( [0] => img01.png [1] => img1.png [2] => img2.png [3] => img10.png [4] => img20.png [5] => img30.png [6] => img100.png [7] => img200.png ) */
strnatcasecmp
使用“自然顺序”算法比较字符串(不区分大小写)
int strnatcasecmp ( string $str1 , string $str2 )
该函数实现了以人类习惯对数字型字符串进行排序的比较算法。除了不区分大小写,该函数的行为与 strnatcmp() 类似。
返回值
与其他字符串比较函数类似,如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
示例
//我们将上面例子中 img2.png改为大写 echo '<pre>'; $arr1 = $arr2 = array("img1.png","IMG2.png","img10.png","img01.png","img100.png","img20.png","img30.png","img200.png"); echo "自然序列字符串比较 strnatcmp"."<br>"; usort($arr2,"strnatcmp"); print_r($arr2); echo "自然序列字符串比较 strnatcasecmp"."<br>"; usort($arr2,"strnatcasecmp"); print_r($arr2); /* 自然序列字符串比较 strnatcmpArray ( [0] => IMG2.png [1] => img01.png [2] => img1.png [3] => img10.png [4] => img20.png [5] => img30.png [6] => img100.png [7] => img200.png ) 自然序列字符串比较 strnatcasecmpArray ( [0] => img01.png [1] => img1.png [2] => IMG2.png [3] => img10.png [4] => img20.png [5] => img30.png [6] => img100.png [7] => img200.png ) */