函數(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é)
- strpost()函數(shù)在字符串中尋找指定字符串
- strpos()函數(shù)可在指定的位置開始匹配字符串
- strpos()函數(shù)在7.1.0版本開始支持倒序指定匹配位置
- 應(yīng)該使用 “===” 或 “!==” 這類判斷符來處理strpos()的返回值
p.s.為什么我睡不著要來寫文章???
