剖析PHP字符串函數(shù)基礎(chǔ)第1例:strstr與strpos

注:作者說的應(yīng)用場景只是舉例說明,不代表只有這么一種解決問題的方案,也不代表是最優(yōu)解,只是講解這個(gè)函數(shù)的一個(gè)案例而已。

第1例

strstr($haystack, $needle)與strpos($haystack,$needle)

應(yīng)用場景

你需要查找出一段已知字符串中是否存在@符號,你是不是會(huì)有疑惑“你特么都說是已知字符串了,有沒有@符號勞資一眼不就看出來了!”,如果你有此疑問那么勞資也很遺憾你竟然是這樣的程序員!

函數(shù)解釋
// 查找字符串中子串的首次出現(xiàn)
strstr($haystack, $needle) 
-- Find the first occurrence of a string
// 查找字符串中子串首次出現(xiàn)的位置
strpos($haystack,$needle)
-- Find the position of the first occurrence of a substring in a string 

乍一看這兩個(gè)函數(shù)壓根兒沒什么區(qū)別呀,但是請注意strpos強(qiáng)調(diào)的是位置,它的返回值就包括子串首次出現(xiàn)的位置或者false!

而strstr并沒有強(qiáng)調(diào)位置,只把話說了一半,它的返回值就是如果查找到了子串就返回子串,查找不到就返回false!

這兩個(gè)函數(shù)我們都可以用來去判斷一個(gè)字符串中是否存在某個(gè)子串說白了就是去判斷有沒有我們要找的字符如@,但是這里有個(gè)值得注意的地方,敲黑板!劃重點(diǎn)!字符串位置是從0開始,而不是從1開始的。 我為什么會(huì)說這句話會(huì)是重點(diǎn)呢?如上所說strpos強(qiáng)調(diào)的是位置,如果子串出現(xiàn)的位置是第一個(gè),那么它的位置就是0,如果你在if語句中使用if ($result == false) 這類語句你就中招了,因?yàn)?是真,0是假,那么你得到的結(jié)果將會(huì)是0 == false

我覺得說到這里也就差不多了,我們來寫幾行代碼看一看。

<?php
$haystack_string = 'abcdefg@hijk';
$needle_string   = '@';
print_r(strstr($haystack_string, $needle_string));

這里的返回值是:@hijk

我們把函數(shù)換成strpos再來看返回值

<?php
$haystack_string = 'abcdefg@hijk';
$needle_string   = '@';
print_r(strpos($haystack_string, $needle_string));

這里的返回值是:7

很高興,這兩個(gè)函數(shù)都滿足了我們應(yīng)用場景提出的需求,接下來我們繼續(xù)擴(kuò)展一下,我們來查找a

<?php
$haystack_string = 'abcdefg@hijk';
$needle_string   = 'a';
$result = strstr($haystack_string, $needle_string);
if ($result){
    print_r('找到了!當(dāng)前返回值是:' . $result);
}else{
    print_r('沒找到!當(dāng)前返回值是:' . $result);
}

這里的返回值是:找到了!當(dāng)前返回值是:abcdefg@hijk

我們把函數(shù)換成strpos再來看返回值

<?php
$haystack_string = 'abcdefg@hijk';
$needle_string   = 'a';
$result = strpos($haystack_string, $needle_string);
if ($result){
    print_r('找到了!當(dāng)前返回值是:' . $result);
}else{
    print_r('沒找到!當(dāng)前返回值是:' . $result);
}

這里的返回值是:沒找到!當(dāng)前返回值是:0

這里就是我剛才 敲黑板! 提到的問題所在,因?yàn)閍是第一個(gè)出現(xiàn)的,它的下標(biāo)是0,而 0 == false,所以就出現(xiàn)了這樣的情況,如果你堅(jiān)持想要使用strpos,請記住要養(yǎng)成使用 === 或者 !== 的習(xí)慣。

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

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

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