PHP

PHP字符串处理函数:strpos() -- 内置函数

2018-08-15  本文已影响0人  MangfuStudio

函数简介

在字符串中查找指定的字符串,查找方式为 顺序 查找。即从字符串“头”找到字符串“尾”。
查找成功:返回指定字符串在原字符串中的第一个位置。
查找失败:返回 flase

函数原型

strpos( $haystack, mixed $needle, [,offset=0]);
//从php7.1.0版本开始,strpos()的offset支持传入负数

参数解析

实例1: 简单的查找(不指定开始搜索的位置)

<?php
$str = "one plus one equals tow" ; //原字符串
$search = "one" ;                  //要查找的字符串
var_dump(strpos($str,$search)) ;
?>

运行结果

D:\WampServer\www\MyPhpCode\01.php:5:int 0

从运行结果可知,strpos()的返回值为 int 型,返回结果为 0 ,因为要查找的字符串就在原字符串的“开头”。
如果不知道 0 是什么,其实0是o的下标,1是n的下标,可以参考下面的小下标对照表。

o |n |e |  |p |l |u |s |  |o |n |e |  |e |q |u |a |l |s |  |t |o |w
0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10|11|12|13|14|15|16|17|18|19|20|21|22

小提示:var_dump()函数与print_r()函数功能相似,但前者输出的信息更为详细,调试时建议用var_dump()函数输出结果

实例二(传递第三个参数,指定开始搜索的位置)

<?php
$str = "one plus one equals tow" ; //原字符串
$search = "one" ;                  //要查找的字符串
var_dump(strpos($str,$search,3)) ; //指定开始的查找位置为3
?>

运行结果

D:\WampServer\www\MyPhpCode\01.php:5:int 9

在第二个例子中,要查找的字符串依旧为one,但这次的结果由原来的 0 变为 9 ,因为我规定了在原字符串的第3个字符的位置开始查找(可对照第一个例子的下标表),所以原字符串中"开头"的one在查找范围之外,因而返回的是第二个one在原字符串的位置,即 9 。

倒序指定开始查找的位置

php7.1.0版本开始支持传入负数来规定开始搜索的位置。

原字符串:one plus one equals tow
strpos($str,$search,-3)会在tow字符串中寻找
strpos($str,$search,-10)会在equals tow字符串中寻找

例如寻找“one plus one equals tow”中的“equals“。

顺序查找

<?php
$sh = 'one plus one equals tow' ; 
$search = 'equals' ;
var_dump(strpos($sh,$search));
?>
输出     D:\WampServer\www\MyPhpCode\01.php:4:int 13



倒序指定位置

<?php
$sh = 'one plus one equals tow' ; 
$search = 'equals' ;
var_dump(strpos($sh,$search,-11)); //将在 equals tow 中查找 
?>
输出     D:\WampServer\www\MyPhpCode\01.php:4:int 13

返回值处理问题

在最后提下处理strpos()返回值false的问题,看下面代码。

<?php
$sh = 'false and ture' ; 
$search = 'false' ;
$value = strpos($sh,$search) ;
if( $value == false ) {
    echo "无匹配字符" ;
} else {
    echo "位置: ".$value ;
}
?>

从上面代码可以看出,我的目的是在strpos()函数无法匹配到字符串时打印提示信息,否则打印要查找字符串在原字符串中的位置(偏移量),看下面的运行结果

无匹配字符

并不是我们期待的结果
再看下面代码

<?php
$sh = 'false plus one equals tow' ; 
$search = 'false' ;
$value = strpos($sh,$search) ;
if( $value === false ) {
    echo "无匹配字符" ;
} else {
    echo "位置: ".$value ;
}
?>

结果

位置: 0

为什么会这样?因为 "==" 运算符只是对值进行比较,当类型不一样的数据进行对比时,如果一方为数字,另一方如果不是数字,则会转换为 0 后再比较。而 "===" 对比数据类型与值。

if( $value == false ) <==等价于==> if( $value == 0 ) <==等价于==> if( 0 == 0 )

所以,如果要对strpos()的返回值做判断,应该始终使用 "===" 或者 "!==" 这类运算符。

总结

  1. strpost()函数在字符串中寻找指定字符串
  2. strpos()函数可在指定的位置开始匹配字符串
  3. strpos()函数在7.1.0版本开始支持倒序指定匹配位置
  4. 应该使用 “===” 或 “!==” 这类判断符来处理strpos()的返回值



p.s.为什么我睡不着要来写文章???

@_@
上一篇 下一篇

猜你喜欢

热点阅读