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采集速度探究总结(原创)
Apr 18 PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 PHP
php-perl哈希算法实现(times33哈希算法)
Dec 30 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
smarty自定义函数用法示例
May 20 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
php实现单笔转账到支付宝功能
Oct 09 PHP
laravel 自定义常量的两种方案
Oct 14 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
基于PHP+MySQL的聊天室设计
2006/10/09 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php实现的双向队列类实例
2014/09/24 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
Python贪心算法实例小结
2018/04/22 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
Python实现序列化及csv文件读取
2020/01/19 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
工艺工程师岗位职责
2014/03/04 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
沈阳故宫导游词
2015/01/31 职场文书
2015年化验员工作总结
2015/04/10 职场文书
撤诉申请怎么写
2015/05/19 职场文书
安全教育培训制度
2015/08/06 职场文书
Go归并排序算法的实现方法
2022/04/06 Golang