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


函数简介

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

函数原型

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


参数解析

  • $haystack:原字符串
  • $needle:要查找的字符串
  • $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.为什么我睡不着要来写文章???

@_@

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容