PHP字符串處理函數(shù):strpos() -- 內(nèi)置函數(shù)


函數(shù)簡(jiǎn)介

在字符串中查找指定的字符串,查找方式為 順序 查找。即從字符串“頭”找到字符串“尾”。
查找成功:返回指定字符串在原字符串中的第一個(gè)位置。
查找失?。悍祷?flase

函數(shù)原型

strpos( $haystack, mixed $needle, [,offset=0]);
//從php7.1.0版本開始,strpos()的offset支持傳入負(fù)數(shù)


參數(shù)解析

  • $haystack:原字符串
  • $needle:要查找的字符串
  • $offset:可選參數(shù),用于指定在原字符串中開始搜索的位置

實(shí)例1: 簡(jiǎn)單的查找(不指定開始搜索的位置)

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

運(yùn)行結(jié)果

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

從運(yùn)行結(jié)果可知,strpos()的返回值為 int 型,返回結(jié)果為 0 ,因?yàn)橐檎业淖址驮谠址摹伴_頭”。
如果不知道 0 是什么,其實(shí)0是o的下標(biāo),1是n的下標(biāo),可以參考下面的小下標(biāo)對(duì)照表。

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()函數(shù)與print_r()函數(shù)功能相似,但前者輸出的信息更為詳細(xì),調(diào)試時(shí)建議用var_dump()函數(shù)輸出結(jié)果


實(shí)例二(傳遞第三個(gè)參數(shù),指定開始搜索的位置)

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

運(yùn)行結(jié)果

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

在第二個(gè)例子中,要查找的字符串依舊為one,但這次的結(jié)果由原來的 0 變?yōu)?9 ,因?yàn)槲乙?guī)定了在原字符串的第3個(gè)字符的位置開始查找(可對(duì)照第一個(gè)例子的下標(biāo)表),所以原字符串中"開頭"的one在查找范圍之外,因而返回的是第二個(gè)one在原字符串的位置,即 9 。


倒序指定開始查找的位置

php7.1.0版本開始支持傳入負(fù)數(shù)來規(guī)定開始搜索的位置。

原字符串:one plus one equals tow
strpos($str,$search,-3)會(huì)在tow字符串中尋找
strpos($str,$search,-10)會(huì)在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()函數(shù)無法匹配到字符串時(shí)打印提示信息,否則打印要查找字符串在原字符串中的位置(偏移量),看下面的運(yùn)行結(jié)果

無匹配字符

并不是我們期待的結(jié)果
再看下面代碼

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

結(jié)果

位置: 0

為什么會(huì)這樣?因?yàn)?"==" 運(yùn)算符只是對(duì)值進(jìn)行比較,當(dāng)類型不一樣的數(shù)據(jù)進(jìn)行對(duì)比時(shí),如果一方為數(shù)字,另一方如果不是數(shù)字,則會(huì)轉(zhuǎn)換為 0 后再比較。而 "===" 對(duì)比數(shù)據(jù)類型與值。

if( $value == false ) <==等價(jià)于==> if( $value == 0 ) <==等價(jià)于==> if( 0 == 0 )

所以,如果要對(duì)strpos()的返回值做判斷,應(yīng)該始終使用 "===" 或者 "!==" 這類運(yùn)算符。


總結(jié)

  1. strpost()函數(shù)在字符串中尋找指定字符串
  2. strpos()函數(shù)可在指定的位置開始匹配字符串
  3. strpos()函數(shù)在7.1.0版本開始支持倒序指定匹配位置
  4. 應(yīng)該使用 “===” 或 “!==” 這類判斷符來處理strpos()的返回值



p.s.為什么我睡不著要來寫文章???

@_@

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容