论strpos的正确使用方式

首先简单介绍下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 '存在';
}

白俊遥博客

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共5条评论
白俊遥博客

那天的你 :领教了

2020-03-22 19:30:23 回复

白俊遥博客

黑暗骑士 :fsdfsa

2017-11-03 15:16:57 回复

白俊遥博客

道法自然 :if(!is_int(strpos('hello world’,'hello )))  echo '不存在'

2017-03-01 16:47:56 回复

白俊遥博客

小六HI :多调用一次 is_int()函数,不划算

2017-03-05 14:38:58 回复

白俊遥博客

秋暮_夕阳 :受教了

2016-11-15 14:02:11 回复