PHP学习之字符串比较和查找


Posted in PHP onApril 17, 2011

1. 字符串比较
在PHP中,可以用==(双等号)或者 ===(三等号)来比较字符串。两者的区别是双等号不比较类型,三等号会比较类型,它不转换类型;用双等号进行比较时,如果等号左右两边有数字类型的值,刚会把另一个值转化为数字,然后进行比较。这样的话,如果是纯字符串或者NULL时,会转化为0进行比较。同样,大小于号也和等号一样,比较时可能出现不正确的结果。
所以,比较字符串可以用PHP的自带函数strcmp和strcasecmp。其中strcasecmp是strcmp的变种,它会先把字符串转化为小写再进行比较。 如下代码:

var_dump(0 == 'Test'); 
var_dump(0 == ''); 
var_dump(5 > 'T'); 
var_dump(strcmp(5, 'T'));

结果为(第1~3结果是不对的,只有第4个是对的):
bool(true) 
bool(true) 
bool(true) 
int(-1)

2. 字符串处理
1. 子串
$sub = substr(string, start[, length]);
2. 子串替换
$newstring = substr_replace(string, new, start[, length]);
用这个函数可以实现字符串的插入,删除操作。这个函数的start和length可以为负数。分别表示从后开始计算以及保留最后几位不替换。 3. 字符串反序
$newstring = strrev(string);
4. 重复字符串
$newstring = str_repeat(string, count);
返回一个重复count次string的新字符串。
5. 填充字符串
$newstring = str_pad(to_pad, length[, with[, type]]);
其中type有:STR_PAD_RIGHT(默认)、STR_PAD_LEFT和STR_PAD_BOTH三种;with默认为空格。函数表示把to_pad字符串用with填充为一个长度为length的字符串。 如下代码:
// 子串 
var_dump(substr('1234567890', 8)); // 90 
var_dump(substr('1234567890', 0, 2)); // 12 
// 反方向子串 
var_dump(substr('1234567890', -8)); // 34567890 
var_dump(substr('1234567890', -8, -2)); // 345678 
var_dump(substr('1234567890', -8, 2)); // 34 
// 插入 
var_dump(substr_replace('1234567890', 'a', 0, 0)); // a1234567890 
// 删除 
var_dump(substr_replace('1234567890', '', 8)); // 12345678 
// 反方向删除 
var_dump(substr_replace('1234567890', '', -2, -1)); // 123456780 
// 替换 
var_dump(substr_replace('1234567890', 'a', 0, 1)); // a234567890 
// 反方向替换 
var_dump(substr_replace('1234567890', 'a', -2, -1)); // 12345678a0 
// 字符串反转 
var_dump(strrev('1234567890')); // 0987654321 
// 重复字符串 
var_dump(str_repeat('12', 3)); // 121212 
// 填充字符串 
var_dump(str_pad('a', 10, '12')); // a121212121 
var_dump(str_pad('a', 10, '12', STR_PAD_LEFT)); // 121212121a 
var_dump(str_pad('a', 10, '12', STR_PAD_BOTH)); // 1212a12121

3. 分解字符串
在PHP中,字符串的分解用explode,合并用implode(join是implode的别名),标记用strtok。还有另一个函数slipt也可以分解(正则分解),但5.3以后版本已经不推介了。 另外PHP中还有一个sscanf()函数,用于读取字符串。
strtok标记时,用strtok($str, $token)来初始化,用strtok($token)来继续取值。
代码如下:
$str = '1,2,3'; 
$arr1 = explode(',', $str); // array('1', '2', '3') 
$arr2 = explode(',', $str, 2); // array('1', '2,3') 
$str1 = implode(',', $arr1); // '1,2,3' 
$str2 = strtok($str, ','); // 1 
$str3 = strtok(','); // 2 
$str4 = strtok(','); // 3 
// array(86, 10, 88888888, 'Beijin') 
$arr3 = sscanf('+86(10)88888888 Beijin', '+%d(%d)%d %s');

4.字符串查找
在PHP中,字符串的查找有三个系列。返回位置的、返回字符串的、掩码个数匹配。其中,返回位置的的函数一共有两个,strpos()和 strrpos();返回字符串的也有两个strstr()和strchr();返回掩码匹配数的函数有strspn()和strcspn()。
strpos表示从左边开始计数,返回要查找的字符串第一次出现的位置;strrpos表示从右边计数,返回要查找的字符串第一次出现的位置。
strstr表示从左边计数,返回要查找字符串第一次到结尾的子串(包括查找字符串),当查找的是字符时,可以用ascii码数字来表示字符;stristr表示不区分大小查找;strchr是strstr的别名;strrchr返回字符最后出现到结尾的子串。
strspn表示从左边计数,第一次出现非掩码之前的子串的字符数;strcspn表示从左边计数,第一次出现掩码之前的子串的字符数。
示例代码:
$pos = strpos('This a hello world program', ' '); // 4 
$pos = strpos('This a hello world program', 32); // 4 
$pos = strrpos('This a hello world program', ' '); // 18 
$pos = strrpos('This a hello world program', 32); // 18 
$str = strstr('This a hello world program', ' '); // " a hello world program" 
$str = strstr('This a hello world program', 32); // " a hello world program" 
$str = stristr('This a hello world program', ' A'); // "a hello world program" 
$str = stristr('This a hello world program', 65); // "a hello world program" 
$str = strrchr('This a hello world program', ' '); // " program" 
$str = strrchr('This a hello world program', 32); // " program" 
$str1 = "12345 12345 12345"; 
$len = strspn($str1, '12345'); // 5 
$len = strcspn($str1, ' '); // 5

参考资料: PHP程序设计,2003,第四章 字符串,字符串比较;字符串查找和处理
PHP 相关文章推荐
php 静态变量的初始化
Nov 15 PHP
php 获取客户端的真实ip
Nov 30 PHP
PHP Socket 编程
Apr 09 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
php学习之function的用法
Jul 14 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
php导出生成word的方法
Dec 25 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
Apr 23 PHP
PHP学习之整理字符串
Apr 17 #PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 #PHP
PHP基础学习小结
Apr 17 #PHP
php 生成文字png图片的代码
Apr 17 #PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 #PHP
php编写一个简单的路由类
Apr 13 #PHP
php 求质素(素数) 的实现代码
Apr 12 #PHP
You might like
全文搜索和替换
2006/10/09 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
PHP面向对象详解(三)
2015/12/07 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
jQuery中removeAttr()方法用法实例
2015/01/05 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
js实现蒙版效果
2020/01/11 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python之web模板应用
2017/12/26 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
Python多线程获取返回值代码实例
2020/02/17 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
如何手工释放资源
2013/12/15 面试题
应届生污水处理求职信
2013/11/06 职场文书
酒店秘书求职信范文
2014/02/17 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
情况说明书怎么写
2015/10/08 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js
Python PIL按比例裁剪图片
2022/05/11 Python