首页 > 编程语言 >【web开发】PHP之字符串比较

【web开发】PHP之字符串比较

时间:2023-06-23 23:01:10浏览次数:25  
标签:web arr 函数 echo 大小写 字符串 PHP strcmp

前言

字符串的比较或者说字符串的判断是任何一门编程语言的字符串处理功能中的非常重要的特性之一。同时也是在实际开发中最常使用的字符串判断方式,在PHP中,除了可以使用比较运算符号(“==”或者<以及>)来进行比较操作,还提供了一个系列的比较函数,使得PHP可以进行更加复杂的字符串比较,也使得PHP中的字符串比较更加强大和简便。如:strcmp(),strcasecmp()以及strnatcmp()等等函数,不知道你有没有发现在PHP中,有关于字符的比较操作函数几乎是以str开头的函数,当然也有个别的函数并不是这样,如:substr_compare()【从指定的开始位置(二进制安全和选择性区分大小写)比较两个字符串。】,只是大部分常用的函数是这样的。就连很多其他字符串相关的操作函数也是str开头的。在平时的学习中学会归纳总结,更有利于记忆.如下图:

【web开发】PHP之字符串比较_PHP

【web开发】PHP之字符串比较_大小写_02

按字节顺序进行字符串比较

要按字节顺序进行字符串的比较,可以使用strcmp()和strcasecmp()两个函数(cmp就是compare),其中函数strcasecmp()函数可以忽略字符串中字母的大小写进行比较。

int strcmp(string str1, string str2) //区分字母大小写
int strcasecmp(string str1, string str2) //不区分字母大小写

这两个函数的用法是类似的几乎一模一样,最大的区别就是字母的大小写比较,两个函数都需要传入进行比较的两个字符串参数。可以对输入的str1和str2两个字符串,按照字节的ASCII值从两个字符串的首字节开始比较,如果相等则进入下一个字节的比较,直至结束比较。返回以下三个值其中之一:

  1. 如果str1等于str2则返回0
  2. 如果str1大于str2则返回1
  3. 如果str1小于str2则返回-1

我们通过例子来详细介绍,先看例子:

<?php
$name = "zhangsan";
$password = "123456qwert";

if(strcasecmp($name, "zhangsan") == 0){ //使用不区分字母大小写的比较函数进行比较
	echo "用户已存在<br>";
}

if(strcasecmp(strtolower($name),strtolower("zhangsan")) == 0){//当存在字符大小写的时候,可以使用字母转换函数同时转换为大写或者小写再进行比价,同样起到忽略大小写进行比较的效果
	echo "用户已存在<br>";
}

$flag = strcmp($password, "123456qwert");
if($flag == 0){
	echo "两个字符相等<br>";
}elseif($flag == 1){
	echo "第一个字符串大于第二个字符串<br>";
}elseif($flag == -1){
	echo "第一个字符串小于第二个字符串<br>";
}

switch($flag){
	case 0:
		echo "两个字符相等<br>";
		break;
	case 1:
		echo "第一个字符串大于第二个字符串<br>";
		break;
	case -1:
		echo "第一个字符串小于第二个字符串<br>";
		break;
}

执行结果如下:

【web开发】PHP之字符串比较_PHP_03

以上的例子中,通过字符串比较后对返回值判断两个比较字符串的大小。使用strcmp()函数进行区分字符串中的字母大小写的比较。使用strcasecmp()函数进行忽略字符串中字母大小写的比较。当然也可以对中文等多字节字符进行比较。

按自然排序进行字符串比较

除了可以按照字节位的字典顺序进行比较,PHP中还提供了按照自然排序法对字符串进行比较。所谓的自然顺序是指按照人们日常生活中的思维习惯进行排序,即是将字符串中的数字部分按照数字大小进行比较。比如:按照字节比较时:"4"大于"22",因为"4"大于"22"中的第一个字符,而按照自然顺序法则应是"22"大于"4"的.使用strnatcmp()函数(nat在这里是nature的意思)按自然排序法比较两个字符串,此函数对大小写敏感,其使用格式与strcmp()函数类似,也就是使用的过程中是区分字母大小写的.下面我们通过具体的例子进行了解:

对一个数组中带有数字的文件名,使用冒泡排序法(在编程中还有很多经典的排序算法,感兴趣的话可以自行了解,前面的文章中也有常用算法的介绍)分别通过两种比较方法进行排序:

<?php
$filesArr = array(
	"file11.txt",
	"file22.txt",
	"file1.txt",
	"file2.txt",
	"file4.txt",
	"file33.txt"
);

//定义一个冒泡排序算法
function bubbleSort($arr, $sel=false){
	for($i=0; $i<count($arr); $i++){
		for($j=0; $j<(count($arr)-1); $j++){
			if($sel){
				if(strcmp($arr[$j], $arr[$j+1]) > 0){
					//交换值
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}else{
				if(strnatcmp($arr[$j], $arr[$j+1]) > 0){
					//交换值
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}
		}
	}
	return $arr;
}
//使用strcmp
echo "使用strcmp():";
echo "<pre>";
print_r(bubbleSort($filesArr, true));
//使用strnatcmp
echo "<br>";
echo "使用strnatcmp():";
echo "<pre>";
print_r(bubbleSort($filesArr, false));

执行结果如下:

【web开发】PHP之字符串比较_PHP_04

从结果就可以明显看出区别,在PHP中也提供了这个函数的忽略大小写的函数strnatcasecmp(),使用方法和strnatcmp()函数相同.

<?php
$filesArr = array(
	"file11.txt",
	"file22.txt",
	"file1.txt",
	"File2.txt",
	"file4.txt",
	"file33.txt"
);

//定义一个冒泡排序算法
function bubbleSort($arr, $sel=false){
	for($i=0; $i<count($arr); $i++){
		for($j=0; $j<(count($arr)-1); $j++){
			if($sel){
				if(strcmp($arr[$j], $arr[$j+1]) > 0){
					//交换值
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}else{
				if(strnatcmp($arr[$j], $arr[$j+1]) > 0){
					//交换值
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}
		}
	}
	return $arr;
}

//定义一个冒泡排序算法 ,忽略大小写
function bubbleSort2($arr, $sel=false){
	for($i=0; $i<count($arr); $i++){
		for($j=0; $j<(count($arr)-1); $j++){
			if($sel){
				if(strcasecmp($arr[$j], $arr[$j+1]) > 0){
					//交换值
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}else{
				if(strnatcasecmp($arr[$j], $arr[$j+1]) > 0){
					//交换值
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}
		}
	}
	return $arr;
}
echo "区分大小写<br>";
//使用strcmp
echo "使用strcmp():";
echo "<pre>";
print_r(bubbleSort($filesArr, true));
//使用strnatcmp
echo "<br>";
echo "使用strnatcmp():";
echo "<pre>";
print_r(bubbleSort($filesArr, false));

echo "忽略大小写<br>";
//使用strcmp
echo "使用strcmp():";
echo "<pre>";
print_r(bubbleSort2($filesArr, true));
//使用strnatcmp
echo "<br>";
echo "使用strnatcasecmp():";
echo "<pre>";
print_r(bubbleSort2($filesArr, false));

执行结果如下:通过输出的结果对比一目了然

【web开发】PHP之字符串比较_strcmp()_05

标签:web,arr,函数,echo,大小写,字符串,PHP,strcmp
From: https://blog.51cto.com/micai01/6539380

相关文章

  • Springboot web 项目开发流程梳理总结
    项目开发流程梳理总结1.环境准备1.准备数据库表(user,order);2.创建springboot工程,引入对应的起步依赖(web,mybatis,mybatisx,mysql驱动,lombok);3.配置文件application.properties中引入mybatis的配置信息,准备对应的实体类;4.准备对应的mapper,service(接口,实现类),controlle......
  • WEB安全-渗透测试-waf绕过信息收集
    waf绕过WAF拦截会出现在安全测试的各个层面,掌握各个层面的分析和绕过技术最为关键本文主要讲述以下四种环境下的waf绕过Safedog-默认拦截机制分析绕过-未开CCSafedog-默认拦截机制分析绕过-开启CCAliyun_os-默认拦截机制分析绕过-简要界面BT(防火墙插件)-默认拦截机制分......
  • vue学习第25天 移动WEB开发----响应式布局
    目标:1)响应式原理2)使用媒体查询完成响应式导航3)使用Bootstrap的栅格系统4)使用Bootstrap的响应式工具5)完成阿里百秀首页案例 目录:1)响应式开发2)Bootstrap前端开发框架3)Bootstrap栅格系统4)阿里百秀首页案例  ......
  • Python字符串前缀u、r、b、f含义
    Python字符串前缀u、r、b、f含义1、字符串前加u例子:u"字符串中有中文"含义:前缀u表示该字符串是unicode编码,Python2中用,用在含有中文字符的字符串前,防止因为编码问题,导致中文出现乱码。另外一般要在文件开关标明编码方式采用utf8。Python3中,所有字符串默认都是unicode字符串......
  • PHP截取 字符串中的某部分 并输出
    本文转载自:PHP截取字符串中的某部分并输出更多内容请访问钻芒博客:https://www.zuanmang.net一、strstr获取指定字符串之后或之前所有字符1、使用strstr(“原始字符”,”指定的字符”,布尔值)布尔值为可选,为true返回第一次出现之前的字符串部分,默认为false返回返回第一......
  • PHP提取 去除 字符串小括号()内的内容
    本文转载自:PHP提取去除字符串小括号()内的内容更多内容请访问钻芒博客:https://www.zuanmang.netphp提取字符串小括号里面的内容1.使用preg_replace()函数提取第一个小括号()中的内容:<?php$str='珠穆朗玛峰海拔为(8844.43)米.';echopreg_replace("#^.*?\((.*?)\).*?$#us",......
  • Web常见安全问题
    1.SQL注入SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL......
  • thinkphp3.2后台谷歌验证码
    1.谷歌类库A<?phpnamespaceCommon\Ext;classGoogleAuthenticator{ protected$_codeLength=6; publicfunctioncreateSecret($secretLength=16) { $validChars=$this->_getBase32LookupTable(); unset($validChars[32]); $secret='';......
  • thinkphp3.2评论回复点赞功能
    1.composer下载thinkphp3.2composercreate-projecttopthink/thinkphpyour-project-name2.创建数据库CREATETABLE`comments`( `id`INT(11)UNSIGNEDNOTNULLAUTO_INCREMENT, `content`textCOLLATEutf8_unicode_ciNOTNULL, `user_id`INT(11)UNSIGNEDNOTNU......
  • webdriver通过tag_name定位
    webdriver通过tag_name定位代码示例:#encoding=utf-8importtimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportBydriver=webdriver.Chrome()#打开百度首页driver.get("https://www.baidu.com")#根据名LINK_TEXT获取元素tag_name=dri......