首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >strpos 转

strpos 转

作者头像
双面人
发布2019-04-10 16:17:23
6840
发布2019-04-10 16:17:23
举报
文章被收录于专栏:热爱IT热爱IT

一、前方有坑

php某些自带函数,如果使用不当,也会坑得你人仰马翻。比如:strpos()

先了解一下strpos()函数是干啥的。

strpos — 查找字符串首次出现的位置

用法: int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

看下面代码:

$a = 'abcd'; $b = 'b'; $c = 'a'; echo strpos($a,$b) ? '原来是兄弟<br/>' : '非我族类,砍ta<br/>'; echo strpos($a,$c) ? '原来是兄弟<br/>' : '非我族类,砍ta<br/>'; echo strpos($a,$c)!=false ? '原来是兄弟' : '非我族类,砍ta';

结果显示

原来是兄弟 非我族类,砍ta 非我族类,砍ta

$c 命名是$a的一部分,结果当成异类,连着被砍了两次,冤枉,引发了一场本是同根生,相煎何太急的血案悲剧!

php踩过的那些坑(4) strpos引发的血案
php踩过的那些坑(4) strpos引发的血案

二、防坑攻略

stripos()返回的是字符串在另一个字符串出现的位置,而这个位置是从0开始计算的。$c在$a中出现的位置是0,因此被砍。

所以,正确的判断应该是:

$a = 'abcd'; $c = 'a'; echo strpos($a,$c)!==false ? '原来是兄弟' : '非我族类,砍ta';

三、为啥有坑

防坑攻略里说了一些原因,这里先充分了解strpos()函数说起。

用法:int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

参数:

  • haystack 在该字符串中进行查找。
  • needle 如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。
  • offset 可选的 offset 参数可以用来指定从 haystack 中的哪一个字符开始查找。返回的数字位置是相对于 haystack 的起始位置而言的。

返回值

以整型返回位置信息。如果没找到 needle,strpos() 将返回布尔型的 FALSE 值。

也就是说,此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值,例如 0 或 ""(空串)。因此,在判断的时候,需要使用恒等于’===‘或者恒不等于’===‘来判断,千万不能省去一个’=‘号。

四、防坑扩展:

1、类似的函数还有

strrpos() - 计算指定字符串在目标字符串中最后一次出现的位置 stripos() - 查找字符串首次出现的位置(不区分大小写) strripos() - 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)

2、判断一个字符串是否在另一个字符串中还有一个函数:strstr()。与strpos()有一点不同是,该函数的返回值是false或者字符串的一部分。如果单纯的判断两个字符串的包含关系,最好使用strpos,因为速度更快、耗费内存更少。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/10/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前方有坑
  • 二、防坑攻略
  • 三、为啥有坑
  • 四、防坑扩展:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档