首先简单介绍下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 '存在';
}
发表评论
沙发空缺中,还不快抢~