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 相关文章推荐
PHP数据库开发知多少
Oct 09 PHP
PHP新手上路(三)
Oct 09 PHP
php 执行系统命令的方法
Jul 07 PHP
php之XML转数组函数的详解
Jun 07 PHP
php实现的支持断点续传的文件下载类
Sep 23 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
Mar 15 PHP
laravel 解决多库下的DB::transaction()事务失效问题
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
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
PDO实现学生管理系统
2020/03/21 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
会议邀请书范文
2014/02/02 职场文书
更夫岗位责任制
2014/02/11 职场文书
大学军训感言1000字
2014/02/25 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
工作年限证明范本
2015/06/15 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS
Vue的过滤器你真了解吗
2022/02/24 Vue.js