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
用PHP和ACCESS写聊天室(五)
Oct 09 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
PHP安全上传图片的方法
Mar 21 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
php实现的错误处理封装类实例
Jun 20 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
laravel 数据验证规则详解
Oct 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
PHP $_SERVER详解
2009/01/16 PHP
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
phpStorm2020 注册码
2020/09/17 PHP
更正确的asp冒泡排序
2007/05/24 Javascript
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
python生成word合同的实例方法
2021/01/12 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
2013/04/21 HTML / CSS
玩具公司的创业计划书
2013/12/31 职场文书
客户接待方案
2014/02/26 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python