PHP之strpos()引发的血案

一、前方有坑

PHP某些自带函数,如果使用不当,也会坑得你人仰马翻。

比如:strpos()函数 

让我们先了解一下strpos()是干什么的。

strpos() — 查找字符串首次出现的位置(也就是返回首次出现的位置)

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

看下面代码:

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

运行结果:

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

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

钱难有

二、为啥有坑

先充分了解strpos()函数

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

          返回 needlehaystack 中首次出现的数字位置。

参数:

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

返回值:

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

也就是说,此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值,例如 0 或 ""(空串)。

因此,在判断的时候,需要使用恒等于"===" 或者 恒不等于"!=="来判断,千万不能省去一个’=‘号。

三、防坑攻略

strpos()返回的是字符串在另一个字符串出现的位置,而这个位置是从0开始计算的。

$a 在 $str 中出现的位置是0,因此被砍。

所以,正确的判断应该这样写:

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

运行结果:

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

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值