文档章节

论strpos 的正确使用方式

白俊遥
 白俊遥
发布于 2016/05/14 11:11
字数 725
阅读 15
收藏 0

首先简单介绍下strpos函数;

strpos函数是查找某个字符在字符串中的位置;这里需要明确这个函数的作用;

这个函数得到的是位置;如果存在;返回数字;否则返回的是false;

而很多时候我们拿这个函数用来判断字符串中是否存在某个字符;

一些同学使用的姿势是这样的;

// 判断‘白俊遥博客’中是否存在‘博客’这个词
if (strpos('白俊遥博客', '博客')) {
    // 如果存在执行此处代码
    echo '存在';
}else{
    // 如果不存在执行此处代码
    echo '不存在';
}

这段代码输出的是'存在';没什么问题;但是再看下面这段代码;

// 判断‘白俊遥博客’中是否存在‘白’这个字
if (strpos('白俊遥博客', '白')) {
    // 如果存在执行此处代码
    echo '存在';
}else{
    // 如果不存在执行此处代码
    echo '不存在';
}

输出了'不存在';原因是因为 '白' 在 '白俊遥博客' 中的第0个位置;而0在if中表示了false;

所以;如果用strpos来判断字符串中是否存在某个字符时必须使用===false 、必须使用===false必须使用===false

重要的事情说三遍;正确的使用方式如下;

// 判断‘白俊遥博客’中是否存在‘博客’这个词
if (strpos('白俊遥博客', '博客')===false) {
    // 如果不存在执行此处代码
    echo '不存在';
}else{
    // 如果存在执行此处代码
    echo '存在';
}

你以为用上了===你就得到了strpos的整个世界?no;no;no;

这家伙还有个隐藏坑;我来换个词;

// 判断‘白俊遥博客1’中是否存在‘1’这个数字
if (strpos('白俊遥博客1', 1)===false) {
    // 如果不存在执行此处代码
    echo '不存在';
}else{
    // 如果存在执行此处代码
    echo '存在';
}

如果你脑算出来的上面这段代码输出的是‘存在’;

那你这完全没跟上我的套路啊;不是技能的问题了;

是时候为智商讨个说法了;

事实上输出的是'不存在';细心的童鞋会发现这个1 是不带引号的;

strpos的第二个参数必须是字符串型的;

因此;如果你是在循环或者其他情况下调用的strpos函数;而且不确定第二个参数的类型;

那么保险的方式是用strval把它转字符串类型了:

// 判断‘白俊遥博客1’中是否存在‘1’这个数字
$haystack='白俊遥博客1';
$needle=1;
if (strpos($haystack, strval($needle))===false) {
    // 如果不存在执行此处代码
    echo '不存在';
}else{
    // 如果存在执行此处代码
    echo '存在';
}

白俊遥博客

 

本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客http://www.baijunyao.com

© 著作权归作者所有

共有 人打赏支持
白俊遥
粉丝 15
博文 58
码字总数 28701
作品 3
朝阳
程序员
私信 提问
PHP Tidy完美的XHTML纠错&过滤

输入和输出 输入和输出应该说是很多网站的基本功能。用户输入数据,网站输出数据供其他人浏览。 拿目前流行的Blog为例,这里的输入输出就是作者编辑文章后生成博客文章页面供他人阅读。 这里...

peasant
2014/01/15
0
0
strstr、stristr、strpos这三个函数的区别

strstr -- 返回字符串中从某指定字符开始到结束处的字符串。 语法: string strstr ( string haystack, string needle) 返回haystack中从needle开始到结束的字符串. 如果没有返回值,即没有发...

JK_OPERA
2014/05/05
0
0
Linux 下读XML 的类

在Linux下写程序,常需要读一些配置文件。现有的XML工具很多,可以方便的编辑和生成XML。 但VC中用的XML解析器在Linux下不能用。只好自已写了个。用了一下,还不错。 #include #include // *...

长平狐
2013/03/19
103
0
Linux 下读XML 的类

在Linux下写程序,常需要读一些配置文件。现有的XML工具很多,可以方便的编辑和生成XML。 但VC中用的XML解析器在Linux下不能用。只好自已写了个。用了一下,还不错。 #include #include // *...

长平狐
2012/11/19
42
0
使用strpos/stripos的时候 判断 !==False

strpos (PHP 4, PHP 5, PHP 7) strpos — 查找字符串首次出现的位置 说明 ¶ mixed strpos ( string , mixed [, int = 0 ] ) 返回 在 中首次出现的数字位置。 参数 ¶ 在该字符串中进行查找。...

codetask
2016/11/16
16
0

没有更多内容

加载失败,请刷新页面

加载更多

WEB 开发总结

事务处理 事务的4个基本特征 1.Atomic(原子性),事务中包含的操作被看做是一个整体的业务单元,这个业务单元中的操作要么全部成功,要么全部失败,不会出现部分成功,部分失败的场景。 2....

北漂的我
7分钟前
0
0
thinkphp5 利用七牛云 将amr格式语音文件转为mp3

$card_id 是我的本地的文件 将问价名字的后缀名去掉注意access_token的有效期public function ceshi1($card_id){ $mediaid = substr($card_id, 0, -4); $accessKey = ...

小小小壮
11分钟前
0
0
数据区域之堆栈

java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域, 这些区域都有各自的用途,创建和销毁时间 图: 程序计数器是一个较小的内存空间,它的作用可以看做是当前...

恋码之子
11分钟前
0
0
新的一年,来看看大数据与AI的未来展望

本文由云+社区发表 作者:堵俊平 在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展。本次分享将以技术和生态两大视角来看大数据和人工智能...

腾讯云加社区
12分钟前
1
0
死磕源码系列(ReentrantLock)

前言 在高并发领域,ReentrantLock有着广泛的用处,防止多线程带来的并发问题 对于源码,很多人和我一开始一样都觉得非常神秘 这次我将对ReentrantLock进行全方面的揭秘 核心 AbstractQueued...

石日天
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部