注:作者說的應(yīng)用場景只是舉例說明法严,不代表只有這么一種解決問題的方案瓤鼻,也不代表是最優(yōu)解诽里,只是講解這個函數(shù)的一個案例而已辜膝。
第1例
strstr($haystack, $needle)與strpos($haystack,$needle)
應(yīng)用場景
你需要查找出一段已知字符串中是否存在@符號陌凳,你是不是會有疑惑“你特么都說是已知字符串了,有沒有@符號勞資一眼不就看出來了内舟!”,如果你有此疑問那么勞資也很遺憾你竟然是這樣的程序員初橘!
函數(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
乍一看這兩個函數(shù)壓根兒沒什么區(qū)別呀验游,但是請注意strpos強(qiáng)調(diào)的是位置充岛,它的返回值就包括子串首次出現(xiàn)的位置或者false!
而strstr并沒有強(qiáng)調(diào)位置耕蝉,只把話說了一半崔梗,它的返回值就是如果查找到了子串就返回子串,查找不到就返回false垒在!
這兩個函數(shù)我們都可以用來去判斷一個字符串中是否存在某個子串說白了就是去判斷有沒有我們要找的字符如@蒜魄,但是這里有個值得注意的地方,敲黑板场躯!劃重點(diǎn)谈为!字符串位置是從0開始,而不是從1開始的踢关。 我為什么會說這句話會是重點(diǎn)呢伞鲫?如上所說strpos強(qiáng)調(diào)的是位置,如果子串出現(xiàn)的位置是第一個签舞,那么它的位置就是0秕脓,如果你在if語句中使用if ($result == false) 這類語句你就中招了,因?yàn)?是真儒搭,0是假吠架,那么你得到的結(jié)果將會是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
很高興傍药,這兩個函數(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)閍是第一個出現(xiàn)的锯岖,它的下標(biāo)是0介袜,而 0 == false,所以就出現(xiàn)了這樣的情況出吹,如果你堅(jiān)持想要使用strpos遇伞,請記住要養(yǎng)成使用 === 或者 !== 的習(xí)慣。