php中字符串比较函数使用方法

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

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

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

 代码如下 复制代码

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

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

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

 代码如下 复制代码
<?php
$username = "Admin";
$password = "lampBrother";
 
//不区分大小写的比较,如果两个字符串相等返回0
if(strcasecmp($userName,"admin")== 0){
echo "用户名存在";
}
//将两个比较的字符串相应的函数转成全大写或全小写后,也可以实现不区分大小写的比较
if(strcasecmp(strtolower($userName),strtolower("admin")) == 0){
echo "用户名存在";
}
 
//区分字符串中字母的大小写比较
switch(strcmp($password,"lampbrother")){
case 0:
echo "两个字符串相等<br>"; break;
case 1:
echo "第一个字符串大于第二个字符串<br>"; break;
case -1:
echo "第一个字符串小于第二个字符串<br>"; break;
}
?>

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

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

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

 代码如下 复制代码
<?php
//定义一个包含数字值的数组
$files = array("file11.txt","file22.txt","file1.txt","file2.txt");
 
function mySort($arr,$select = false){
for($i=0;$i<count($arr);$i++){
for($j;$j<count($arr)-1;$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:如果想要判断两个字符串是否相等,使用 === 而不是 ==。

时间: 2024-09-27 20:52:07

php中字符串比较函数使用方法的相关文章

Javascript中字符串转数字方法介绍

们知道最简洁的数字转字符串方法是: 强制类型转换 整数要转换成字符串,必须使用Integer.toString()静态方法或者String.valueOf()静态方法,把字符串转换为整数,必须使用Integer.valueOf(). 可见,不能把JavaScript中的类型转换看作为"强制类型转换". 还可使用强制类型转换(type casting)处理转换值的类型.使用强制类型转换可以访问特定的值,即使它是另一种类型的. ECMAScript中可用的3种强制类型转换如下: Boole

Objective-C中字符串的拼接方法小结_IOS

在 java 和 c# 中,字符串的拼接是直接用 + 来操作的.在 OC 中,说是有下面3种方法, NSString* string; // 结果字符串 NSString* string1, string2; //已存在的字符串,需要将string1和string2连接起来  方法1: 复制代码 代码如下: string = [NSString initWithFormat:@"%@,%@", string1, string2 ];   方法2: 复制代码 代码如下: string =

js中字符串转数字方法总结

parseFloat函数  代码如下 复制代码 parseFloat("abc")    // 返回 NaN parseFloat("1.2abc") // 返回 1.2 parseInt函数  代码如下 复制代码 parseInt("abc")    // 返回 NaN parseInt("12abc")  // 返回 12 下面是一段 JavaScript 代码, 同样是将字符串 020 转为整型.  代码如下 复制代码

PHP程序调用MYSQL中字符串加密函数方法总结

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写.PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用.PHP 独特的语法混合了 C.Java.Perl 以及 PH

Go语言中字符串的查找方法小结_Golang

1.func Contains(s, substr string) bool这个函数是查找某个字符是否在这个字符串中存在,存在返回true 复制代码 代码如下: import (  "fmt"  "strings" ) func main() {  fmt.Println(strings.Contains("widuu", "wi")) //true  fmt.Println(strings.Contains("wi

在Python中处理字符串之isdecimal()方法的使用

  这篇文章主要介绍了在Python中处理字符串之isdecimal()方法的使用,是Python入门学习的基础知识,需要的朋友可以参考下 isdecimal()方法检查字符串是否仅由十进制字符组成.此方法只存在于unicode对象. 注意:要定义一个字符串为Unicode,只需前缀分配'u'左引号.以下是示例. 语法 以下是isdecimal()方法的语法: ? 1 str.isdecimal() 参数 NA 返回值 如果字符串中的所有字符为十进制此方法返回true,否则返回false. 例子

PHP函数实现从一个文本字符串中提取关键字的方法

  本文实例讲述了PHP函数实现从一个文本字符串中提取关键字的方法.分享给大家供大家参考.具体分析如下: 这是一个函数定位接收一个字符串作为参数(连同其他配置可选参数),并且定位该字符串中的所有关键字(出现最多的词),返回一个数组或一个字符串由逗号分隔的关键字.功能正常工作,但我正在改进,因此,感兴趣的朋友可以提出改进意见. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

JavaScript中字符串(string)转json的2种方法

  这篇文章主要介绍了JavaScript中字符串(string)转json的2种方法,两种方法分别是使用js函数eval()和.使用jquery.parseJSON()方法,需要的朋友可以参考下 第一种方式: 使用js函数eval(); testJson=eval(testJson);是错误的转换方式. 正确的转换方式需要加(): testJson = eval("(" + testJson + ")"); eval()的速度非常快,但是他可以编译以及执行任何ja

php 删除字符串中的空格多种方法

 本教程提供了几款php教程  删除字符串中的空格多种方法哦,用了php函数,str_replace,trim,正则等替换字符串的空格有效方法 用php自带的函数 str_replace( "   ", " ",$str); 来替换   <?php $str = "##使用函数trim去掉字符串两端特定字符####"; $str1 = trim($str,"#"); //为函数trim传入第二个参数,trim将删除字符串