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新手上路(十三)
Oct 09 PHP
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
php生成随机数或者字符串的代码
Sep 05 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
php递归方法实现无限分类实例代码
Feb 28 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP实现的进度条效果详解
May 03 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
php json相关函数用法示例
2017/03/28 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
关于react-router的几种配置方式详解
2017/07/24 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
学习python (1)
2006/10/31 Python
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
python关于变量名的基础知识点
2020/03/03 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
华三通信H3C面试题
2015/05/15 面试题
介绍一下Python下range()函数的用法
2013/11/07 面试题
学校经典推荐信
2013/10/30 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
PyTorch中permute的使用方法
2022/04/26 Python