从下文中我们可以知道字符串比较除了可以使用函数来进行比较之外,还可以使用==或===来进行字符比较了,下面本文章就字符串比较问题给各位总结一下.

比较字符串是任何编程语言的字符串处理功能中重要的特性之一,在PHP中除了可以使用比较运算符号(==、)加以比较外,还提供了一系列的比较函数,使PHP可以进行更复杂的字符串比较,如strcmp()、strcasecmp()和strnatcmp()等函数.

1.按字节顺序进行字符串比较

要按字节顺序进行字符串的比较,可以使用strcmp()和strcasecmp()两个函数,其中函数strcasecmp()可以忽略字符串中字母的大小写进行比较,这两个函数的原型如下所示:

instrcmp(string str1,string str2)//区分字符串中字母大小写地比较

int strcasecmp(string str1,string str2)//忽略字符串中字母大小写地比较

这两个函数的用法相似,都需要传入进行比较的两个字符串参数,可以对输入的str1和str2两字符串,按照字节的ASCII值从两个字符串的首字节开始比较,如果相等则进入下一个字节的比较,直至结束比较,返回以下三个值之一:

★如果str1等于str2则返回0.

★如果str1大于str2则返回1.

★如果str1小于str2则返回-1.

在下面的程序中通过比较后的返回值判断两个比较字符串大小,使用strcmp()函数区分字符串中字母大小写的比较,使用strcasecmp()函数忽略字符串中字母大小写的比较,当然没有实际意义,代码如下所示:

$username="Admin";

$password="lampBrother";

//不区分大小写的比较,如果两个字符串相等返回0

if(strcasecmp($userName,"admin")== 0){

echo"用户名存在";

}

//将两个比较的字符串相应的函数转成全大写或全小写后,也可以实现不区分大小写的比较

if(strcasecmp(strtolower($userName),strtolower("admin")) == 0){

echo"用户名存在";

}

//开源软件:phpfensi.com

//区分字符串中字母的大小写比较

switch(strcmp($password,"lampbrother")){

case0:

echo"两个字符串相等
";break;

case1:

echo"第一个字符串大于第二个字符串
";break;

case-1:

echo"第一个字符串小于第二个字符串
";break;

}

?>

2.按自然排序进行字符串比较

除了可以按照字节位的字典顺序进行比较外,PHP还提供了按照“自然排序”法对字符串进行比较,所谓自然排序,是指按照人们的日常生活中的思维习惯进行排序,即将字符串中的数字部分按照数字大小进行比较,例如按照字节比较时“4”大于“33”,因为“4”大于“33”中的第一个字符,而按照自然排序法则“33”大于“4”,使用strnatcmp()函数按自然排序法比较两个字符串,该函数对大小写敏感,其使用格式与strcmp()函数相似.

在下面的例子中,对一个数组中带有数字的文件名,使用冒泡排序法通过两种比较方法排序,代码如下所示:

//定义一个包含数字值的数组

$files=array("file11.txt","file22.txt","file1.txt","file2.txt");

functionmySort($arr,$select= false){

for($i=0;$i

for($j;$j

//如果第二个参数为ture则使用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()函数比较大小

}else{

//如果比较结果大于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()函数相同.

除了上面利用函数比较我们还可以使用“===”来判断,至于它和“==”的区别,一般能用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为他们不一定全部为字符串,也能为整型等等.

如果用 !==,===(能看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较,代码如下:

22 =="22";// 返回 true

22 === "22";// 返回false

正因为这样,所以我们的程式时常会发生一些想不到的“意外”,代码如下:

0 =="我爱你";// 返回true

1 == "1 我爱你";// 返回true

还有一种比较方法:

var_dump("1"=="1e0");

var_dump("1"=="0x1");

var_dump("20"=="2e1");

var_dump("10"=="  0x0a");

等等;对,也许你会说在PHP手册的附录中有一部分关于这个问题的总结,问题是,这只是知其然,那么所以然是什么呢?

今天就有一个网友问了我一个问题:

var_dump("1"=="1e0");//true

var_dump("1"=="1ef");//false

这两个的结果为什么不一样啊,也就是说,上面的等式a要成立,那么唯一的解释就是PHP讲他们双发都当作int来比较.

但是,var_dump(“1e0″),或者var_dump(“1″),都是string啊,因为PHP不区分类型,所以她采用一个策略,当你的变量看起来是一个数字的时候,那么她就认为这个变量是一个数字.

简单来说,numeric_string就是表示数字的字符串,也就是说,如下的比较结果都是真,代码如下:

var_dump("1"=="1e0");

var_dump("1"=="0x1");

var_dump("20"=="2e1");

var_dump("10"=="  0x0a");

呵呵,读者们遇到过这个问题的困扰么?代码如下:

if("608E-4234"=="272E-3063"){

echo"oh shit! they're equal!\n";

}else{

echo"obviously, isn't?\n";

}

PHP开发Tips:如果想要判断两个字符串是否相等,使用 === 而不是 ==.

php字符串函数的运用,php中字符串比较函数使用方法相关推荐

  1. python中字符串函数的用法_python中字符串内置函数的用法介绍(代码)

    本篇文章给大家带来的内容是关于python中字符串内置函数的用法介绍(代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. capitalize() 首字母大写a='somewor ...

  2. python中字符串函数的用法_python中字符串内置函数的用法总结

    capitalize() 首字母大写 a='someword' b=a.capitalize() print(b) ->Someword casefold()&lower() 所有字母变 ...

  3. sql中截取字符串函数_SQL Server 2017中的顶级SQL字符串函数

    sql中截取字符串函数 SQL Server 2017 has been in the talk for its many features that simplify a developer's l ...

  4. php字符串如何比较大小写,PHP字符串函数strcmp(二进制安全比较字符串,区分大小写)...

    在PHP中,字符串函数 strcmp() 用来比较字符串,此函数区分大小写. 函数语法:strcmp ( string $str1 , string $str2 ) : int 函数参数说明:参数描述 ...

  5. sql字符串函数_另一堆SQL字符串函数

    sql字符串函数 This article is a supplement to the previously published article, An overview of SQL String ...

  6. python rstrip函数_【C++实现python字符串函数库】strip、lstrip、rstrip方法

    [C++实现python字符串函数库]strip.lstrip.rstrip方法 这三个方法用于删除字符串首尾处指定的字符,默认删除空白符(包括'\n', '\r', '\t', ' '). s.st ...

  7. 中文字符串函数php,php截取中文字符串函数实例,_PHP教程

    php截取中文字符串函数实例, 本文实例讲述了php截取中文字符串函数.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: //中文字符串截取 function substr_zh($st ...

  8. php截取字符串函数 左右,php截取中文字符串函数的技巧

    这篇文章主要介绍了php截取中文字符串函数,实例分析了php针对中文字符串操作的技巧,注意utf-8与gb2312编码的转换问题,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php截取中 ...

  9. Delphi中字符串比较大小 VS Oracle-SQL中字符串比较大小

    重点注意Delphi和Oracle-SQL中比较字符串时空字符串''的根本性的不同 Delphi中的字符串比较 Delphi中字符串比较大小的规则:对应位置的字符按照字符编码值逐个对比,直到遇到可以确 ...

最新文章

  1. 苹果开源代码中惊现“wechat”,老外注释的吐槽亮了!
  2. qt android 对话框,Qt自定义Dialog
  3. Linux 终端操作之简明疾速指南(1)
  4. asp.net core 2.0 api ajax跨域问题
  5. domino Format函数详解
  6. CCF201709-1 打酱油(100分)
  7. 数据分析数据挖掘(四)
  8. 截图工具当前未在计算机上运行 请重启_截图并订在屏幕上 用作对比、对照、参考,非常实用...
  9. 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串
  10. DatawhaleLeeML-Task05-网络设计的技巧第二部分
  11. 使用jsp实现用户注册及登录
  12. 大数据学习——hive阶段:启动HiveServer2启动报TezConfiguration类NoClassDefFoundError错误
  13. Python Pandas读取文件
  14. 关于linux用Xshell的xftp查看隐藏文件夹和文件
  15. spring boot 有哪些方式可以实现热部署?
  16. matlab fsolve实例,转 Matlab非线性方程求解器fsolve总结(含实例)
  17. 从纳什均衡看旁观者效应
  18. 【手撕代码】同步 FIFO、LIFO/Stack
  19. FPGA的亚稳态跟MTBF
  20. RobotFramework 之 公共变量

热门文章

  1. 百度云服务器bcc搭建php环境,使用百度云服务器BCC经验谈
  2. com/mysql/jdbc/statementimpl_com.mysql.jdbc.异常.jdbc4。通信异常:通信链路故障
  3. 一汽奔腾b7o价位_全新第三代奔腾B70有何资格对合资品牌降维打击?
  4. 内网服务器文件如何加密,局域网共享文件如何加密?
  5. C# 实现 rtc_通过Xlua实现unity热更新的一个小例子
  6. 【LuoguP5004】 专心OI - 跳房子
  7. Cocos2d-x中使用第三方so库
  8. MongoDB数据库CXX Driver编译
  9. 大家觉得创业需要些什么
  10. 属于attribute还是property。