PHP strpos函数正确使用姿势

首先简单介绍下strpos函数;

strpos函数是查找某个字符在字符串中的位置;这里需要明确这个函数的作用;

这个函数得到的是位置;如果存在;返回数字;否则返回的是false;

<?php
$str = "你好!!a";
echo strpos($str ,"!");
?>

输出的是 6。同时,中文下的字符在 UTF-8 下是 3 个字符长度,在 gbk 下是2个字符长度。

这个 strpos() 只能用于判断字符在字符串中是否存在。

而很多时候我们拿这个函数用来判断字符串中是否存在某个字符;

一些同学使用的姿势是这样的;

[php]  view plain  copy
  1. // 判断‘白俊遥博客’中是否存在‘博客’这个词  
  2. if (strpos('白俊遥博客''博客')) {  
  3.     // 如果存在执行此处代码  
  4.     echo '存在';  
  5. }else{  
  6.     // 如果不存在执行此处代码  
  7.     echo '不存在';  
  8. }  

这段代码输出的是'存在';没什么问题;但是再看下面这段代码;

[php]  view plain  copy
  1. // 判断‘白俊遥博客’中是否存在‘白’这个字  
  2. if (strpos('白俊遥博客''白')) {  
  3.     // 如果存在执行此处代码  
  4.     echo '存在';  
  5. }else{  
  6.     // 如果不存在执行此处代码  
  7.     echo '不存在';  
  8. }  

输出了'不存在';原因是因为 '白' 在 '白俊遥博客' 中的第0个位置;而0在if中表示了false;

所以;如果用strpos来判断字符串中是否存在某个字符时必须使用===false 、必须使用===false 、必须使用===false

重要的事情说三遍;正确的使用方式如下;

[php]  view plain  copy
  1. // 判断‘白俊遥博客’中是否存在‘博客’这个词  
  2. if (strpos('白俊遥博客''博客')===false) {  
  3.     // 如果不存在执行此处代码  
  4.     echo '不存在';  
  5. }else{  
  6.     // 如果存在执行此处代码  
  7.     echo '存在';  
  8. }  

你以为用上了===你就得到了strpos的整个世界?no;no;no;

这家伙还有个隐藏坑;我来换个词;

[php]  view plain  copy
  1. // 判断‘白俊遥博客1’中是否存在‘1’这个数字  
  2. if (strpos('白俊遥博客1', 1)===false) {  
  3.     // 如果不存在执行此处代码  
  4.     echo '不存在';  
  5. }else{  
  6.     // 如果存在执行此处代码  
  7.     echo '存在';  
  8. }  

如果你脑算出来的上面这段代码输出的是‘存在’;

那你这完全没跟上我的套路啊;不是技能的问题了;

是时候为智商讨个说法了;

事实上输出的是'不存在';细心的童鞋会发现这个1 是不带引号的;

strpos的第二个参数必须是字符串型的;

因此;如果你是在循环或者其他情况下调用的strpos函数;而且不确定第二个参数的类型;

那么保险的方式是用strval把它转字符串类型了:

[php]  view plain  copy
  1. // 判断‘白俊遥博客1’中是否存在‘1’这个数字  
  2. $haystack='白俊遥博客1';  
  3. $needle=1;  
  4. if (strpos($haystackstrval($needle))===false) {  
  5.     // 如果不存在执行此处代码  
  6.     echo '不存在';  
  7. }else{  
  8.     // 如果存在执行此处代码  
  9.     echo '存在';  
  10. }  

白俊遥博客

猜你喜欢

转载自blog.csdn.net/shadow_zed/article/details/80134385