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 相关文章推荐
Discuz 模板引擎的封装类代码
Jul 18 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 PHP
PHP处理Json字符串解码返回NULL的解决方法
Sep 01 PHP
php中运用http调用的GET和POST方法示例
Sep 29 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
phpStorm+XDebug+chrome 配置详解
Apr 01 PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 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
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
JQuery实现级联下拉框效果实例讲解
2015/09/17 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python中关于使用模块的基础知识
2015/05/24 Python
Pandas中resample方法详解
2019/07/02 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
计算机专业学生的自我评价
2013/12/15 职场文书
竞聘书格式及范文
2014/03/31 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
社区母亲节活动总结
2015/02/10 职场文书
红与黑读书笔记
2015/06/29 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
Mysql Show Profile
2021/04/05 MySQL
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
vue使用echarts实现折线图
2022/03/21 Vue.js