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 相关文章推荐
apache+php+mysql安装配置方法小结
Aug 01 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
ThinkPHP3.1查询语言详解
Jun 19 PHP
php中使用url传递数组的方法
Feb 11 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
php 中phar包的使用教程详解
Oct 26 PHP
PHP时间函数使用详解
Mar 21 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 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
博士208HAF收音机实习报告
2021/03/02 无线电
php&amp;java(一)
2006/10/09 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
php目录操作实例代码
2014/02/21 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
node.js中的fs.read方法使用说明
2014/12/17 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
老生常谈python之鸭子类和多态
2017/06/13 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
西式婚礼主持词
2014/03/13 职场文书
一年级学生评语大全
2014/04/21 职场文书
依法行政工作汇报
2014/10/28 职场文书
小学生交通安全寄语
2015/02/27 职场文书
宾馆安全管理制度
2015/08/06 职场文书
七年级思品教学反思
2016/02/20 职场文书
委托书范本格式
2019/04/18 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android