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 相关文章推荐
简单易用的计数器(数据库)
Oct 09 PHP
谈谈新手如何学习PHP
Dec 14 PHP
php购物车实现代码
Oct 10 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
Apr 09 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
php png失真的原因及解决办法
Nov 17 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
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
javascript 得到变量类型的函数
2010/05/19 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
npm qs模块使用详解
2020/02/07 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
python线程池threadpool使用篇
2018/04/27 Python
pyqt5 使用label控件实时显示时间的实例
2019/06/14 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
python如何求100以内的素数
2020/05/27 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
教师绩效工资方案
2014/02/01 职场文书
投资申请报告
2015/05/19 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
大学运动会加油稿
2015/07/22 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers