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程序61条面向对象分析设计的经验小结
Nov 12 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
Dec 25 PHP
PHP反射机制用法实例
Aug 28 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 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
php使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python表示矩阵的方法分析
2017/05/26 Python
python素数筛选法浅析
2018/03/19 Python
TensorFlow损失函数专题详解
2018/04/26 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
学生个人求职自荐信格式
2013/09/23 职场文书
好的旅游活动方案
2014/08/19 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
MySQL Router的安装部署
2021/04/24 MySQL
js实现自动锁屏功能
2021/06/02 Javascript
Navicat连接MySQL错误描述分析
2021/06/02 MySQL