一、前方有坑

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的一部分,结果当成异类,连着被砍了两次,冤枉,引发了一场本是同根生,相煎何太急的血案悲剧!

二、防坑攻略

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,因为速度更快、耗费内存更少。

转载于:https://www.cnblogs.com/phpfensi/p/8143358.html

php踩过的那些坑(2) strpos引发的血案相关推荐

  1. 安装python爬虫scrapy踩过的那些坑和编程外的思考

    '转载地址:http://www.cnblogs.com/rwxwsblog/p/4557123.html' 这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬 ...

  2. Vue2.0配置mint-ui踩过的那些坑

    Vue2.0配置mint-ui踩过的那些坑 最近开发项目的时候逐渐采用vue.js+mint-ui的技术栈,但是昨天开始配置开发环境的时候,遇到了各种报错,即使是按照两家的官方文档配置,也还是会报错, ...

  3. 与webview打交道中踩过的那些坑

    随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...

  4. charles都踩过哪些坑_开水果店的你,踩过了哪些坑?

    我们认为,开水果店遇到的大小问题,很多时候是有共性的.不论是开店新手还是老手,看看这里的案例,是否可以避免走一些弯路呢? 案例1 刘大飞第1次创业开水果踩过的那些坑.创业开水果店之前,刘大飞和合伙人一 ...

  5. 美团在Redis上踩过的一些坑-5.redis cluster遇到的一些问题

    转载请注明出处哈:http://carlosfu.iteye.com/blog/2254154 由于演讲时间有限,有关Redis-Cluster,演讲者没做太多介绍,简单的介绍了一些Redis-Clu ...

  6. python iocp_记对协程增加IOCP支持时候踩过的一些坑

    之前在对tbox的协程库中增加了基于IOCP的io处理,期间踩了不少的坑,这边就做个简单记录吧,省的到时候忘记了,自己看不懂自己这个代码 (= =) 坑点一 WSARecv/WSASend在lpNum ...

  7. Spring Cloud 升级最新 Finchley 版本,踩了所有的坑

    转载自   Spring Cloud 升级最新 Finchley 版本,踩了所有的坑 Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Bo ...

  8. (转)Redis上踩过的一些坑-美团

    上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DBA负责人侯军伟给大家介绍了美团网在redis上踩得一些坑,讲的都是干货和坑. 分为5个部分: 一.周期性出现connect t ...

  9. 踩了无数个坑,才写出稿费1000的文章

    踩了无数个坑,才写出稿费1000的文章,早知道这些就好了,强烈推荐给小白的你. 挣钱难,大家都想靠副业多赚一份收入,比如现在流行的写作,可很多小伙伴都像无头苍蝇般,想要撞大运,殊不知已经踩到了坑,来看 ...

  10. Windows下载FFmpeg最新版(踩了一上午的坑终于成功)

    网上的教程都是以前的傻瓜式下载教程,但是官网页面改了,以前有用的教程,现在变成了踩的一个又一个的坑.这是我最新成功下载FFmpeg的过程,时间是2021年02月11日. 1.官网 Download F ...

最新文章

  1. 华为发布《AR洞察与应用实践白皮书》,提出用5G点燃AR,用AR照亮5G
  2. 董彬教授:用深度神经网络学习偏微分方程及其数值求解的离散格式
  3. c# spire.xls 设置文字为微软雅黑_Excel工作薄常规样式设置,WorkBook.Styles
  4. 漂浮窗口拖动杂谈(续)
  5. 安卓APP_ 布局(5) —— GridLayout网格布局
  6. Android之如何实现阿拉伯版本(RTL)的recycleView的网格布局
  7. [python基础] 浮点数乘法的误差问题
  8. Linux 设置交换分区
  9. 项目中遇到的各种bug和踩过的坑
  10. RemapKey等:小巧实用的键盘映射工具
  11. 大致看了下伍德里奇的《计量经济学导论》
  12. Matlab 均值滤波与中值滤波
  13. 日常运维小知识--1
  14. 服务器图标怎么显示在任务栏,win10任务栏右侧的图标如何显示或隐藏起来?附图文教程...
  15. 个人税计算器(Java)
  16. 品牌稿件怎么写?这些品牌稿件写作技巧值得一看
  17. 降维打击(序列化)的流行手段
  18. Gerrit环境与代码Review实战
  19. 如何调试ajax 和php
  20. 电子邮件地址怎么注册填写?手机怎么注册邮箱地址?

热门文章

  1. 详解LDC架构-设计业务异地多活架构
  2. sysdig_Sysdig: 系统故障排查利器
  3. Centos7下cobbler(补鞋匠)安装部署全过程
  4. 计算机考试电子邮件怎么回复,计算机基础知识电子邮件使用技巧集锦(二)
  5. mysql打字竖线_如何打出竖线,教你怎样键盘打出竖线?
  6. [编译链接装载系列]之聊聊目标文件与ELF格式
  7. canvas 画布标签
  8. VproC#混合编程,加载图片
  9. FTL介绍 -- FTL映射
  10. bzoj:1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名