• strcmp – 二进制安全字符串比较
  • strncmp – 二进制安全比较字符串开头的若干个字符
  • strcasecmp – 二进制安全比较字符串(不区分大小写)
  • strncasecmp – 二进制安全比较字符串开头的若干个字符(不区分大小写)
  • strnatcmp – 使用“自然顺序”算法比较字符串
  • strnatcasecmp – 使用“自然顺序”算法比较字符串(不区分大小写)

strcmp

二进制安全字符串比较

int strcmp ( string $str1 , string $str2 )

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

注意

注意该比较区分大小写。

示例

<?php
echo strcmp("Hello", "hello"); // -1
echo strcmp("5", 5); //
echo strcmp("15", 0xf); //
echo strcmp(61529519452809720693702583126814, 61529519452809720000000000000000); //
echo strcmp(NULL, false); //
echo strcmp(NULL, ""); //
echo strcmp(NULL, 0); // -1
echo strcmp(false, -1); // -2
echo strcmp("15", NULL); //
echo strcmp(NULL, "foo"); // -3
echo strcmp("foo", NULL); //
echo strcmp("foo", false); //
echo strcmp("foo", 5); //
/*
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); //
echo strncmp("abcdef","abc",4); //

strcasecmp

二进制安全比较字符串(不区分大小写)

int strcasecmp ( string $str1 , string $str2 )

该函数与 strcmp() 函数类似,不同之处在于不区分大小写,其他可参考 strcmp()

返回值

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

示例

echo strcasecmp("Hello","hello"); //

strncasecmp

二进制安全比较字符串(不区分大小写)

int strncasecmp ( string $str1 , string $str2 , int $len )

该函数与 strcasecmp() 类似,不同之处在于你可以指定两个字符串比较时使用的长度 
该函数与 strncmp() 也类似,不同之处在于不区分大小写

返回值

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

示例

echo strncasecmp("Hello","hello", 5); //
echo strncasecmp("abcdef","ABC",3); //

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
)
*/

PHP字符串函数之 strcmp strncmp strcasecmp strncasecmp strnatcmp strnatcasecmp的更多相关文章

  1. C语言-字符串函数的实现(一)之strlen

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  2. 字符串函数的实现(三)之strcat

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  3. C语言-字符串函数的实现(五)之strstr

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  4. C语言-字符串函数的实现(二)之strcpy

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  5. c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol

    这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的   1.strlen函数:计算目标字符串长度,    格式:strlen(字符指针指向区域) 注意1:①不包含字符串结束 ...

  6. Linux C 字符串函数 strlen()、strcat()、strncat()、strcmp()、strncmp()、strcpy()、strncpy() 详解

      strlen(返回字符串长度) 表头文件 #include <string.h> 定义函数 size_t strlen(const char *s); 函数说明 strlen()用来计 ...

  7. 实现字符串函数,strlen(),strcpy(),strcmp(),strcat()

    实现字符串函数,strlen(),strcpy(),strcmp(),strcat() #include<stdio.h> #include<stdlib.h> int my_ ...

  8. PHP 语法字符串函数 strcmp、strlen 使用及实现

    说明 这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.X 有差别. 函数分类 用户自定义函数 say(); function say() { echo & ...

  9. c语言实现常见字符串函数strchr strstr strcmp atoi itoi(字符串换成整数)

    好久没有更新博客了,刚刚出炉练练手的程序如下,很简单,没有考虑过多复杂的东西,有好的想法,欢迎指教: 字符查找函数: char *my_strchr(const char *s,int c) { ch ...

随机推荐

  1. vlan划分

    1.vlan:虚拟局域网: 作用:划分广播域,抑制广播风暴: 2.vlan技术的优点: 有效控制广播域范围: 增强局域网的安全性: 灵活构建虚拟工作组: 3.vlan划分的方式: 基于端口: 基于MA ...

  2. 转 cxgrid属性说明

    TCXGRID控件:属性:ActiveLevel: 当前层BorderStyle: 窗口风格Color: 颜色FocusedView: 当前View;Font: 字体LevelTabs: 类似Page ...

  3. Linux命令:cd

    语法 cd [-L|[-P [-e]]] [dir]改变shell当前工作目录.仅对执行命令所在的shell有效. 参数 -L  按符号链接进入目录. -P   按物理链接进入目录 -e    如果指 ...

  4. 2D射影空间,为何引入射影空间

    2D欧氏空间R2中,点的表示是A(x1,y1), B(x2,y2),二维参数,线的表示是L: y=kx+b,是二维参数: 如何表示点在线上面?可以扩展为(k,-1,b)* (x1,y1,1)t = 0 ...

  5. TXLSReadWriteII5 单元格读写

    unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...

  6. python学习Day1 计算机原理编程思维

    一.学习思想:3W+1H   学什么(what).为什么学(why).用在哪里(where).怎么用(how) 学习编程语言重在代码量.代码量.代码量! 二.计算机五大组成部分,三大核心: 五大组成部 ...

  7. 并发系列3:Lock锁以及核心类AQS

    Java Lock类提供了语言级别的Synchronized,Lock与Condition配合与Synchronized配合object一样实现了等待/通知机制.但它提供了更高的灵活性,有:1尝试非阻 ...

  8. Django_Form验证(二),ajax验证

    还是一个简单的html提交页面,ajax提交就不需要form表单了: <p><input id="a" type="text" name=&q ...

  9. mysql查询语句中自定义变量(转)

    转:http://blog.sina.com.cn/s/blog_1512521570102wrfl.htmlselect cost,@a:=@a+1 from testone,(select @a: ...

  10. 语义分割之Dual Attention Network for Scene Segmentation

    Dual Attention Network for Scene Segmentation 在本文中,我们通过 基于自我约束机制捕获丰富的上下文依赖关系来解决场景分割任务.       与之前通过多尺 ...