PHP字符串比较函数strcmp()和strcasecmp()使用总结


Posted in PHP onNovember 19, 2014

比较字符串是任何编程语言的字符串处理功能中重要的特性之一。在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()函数相同。

PHP 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
建立文件交换功能的脚本(一)
Oct 09 PHP
php UTF-8、Unicode和BOM问题
May 18 PHP
php获取目标函数执行时间示例
Mar 04 PHP
小谈php正则提取图片地址
Mar 27 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
Jul 01 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 #PHP
PHP中使用数组指针函数操作数组示例
Nov 19 #PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 #PHP
PHP分页类集锦
Nov 18 #PHP
php去除数组中重复数据
Nov 18 #PHP
php中获取主机名、协议及IP地址的方法
Nov 18 #PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 #PHP
You might like
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python实现DES加密解密方法实例详解
2015/06/30 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
python基于http下载视频或音频
2018/06/20 Python
浅谈Python基础—判断和循环
2019/03/22 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
python中wx模块的具体使用方法
2020/05/15 Python
python eventlet绿化和patch原理
2020/11/21 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
巴西购物网站:Onofre Agora
2020/06/08 全球购物
学习雷锋倡议书
2014/04/15 职场文书
大学生求职信怎么写
2015/03/19 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
初中思品教学反思
2016/02/20 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python