我傾向於使用strpos
$needle='appy';
$haystack='I\'m feeling flappy, and you?';
if(strpos($haystack,$needle)!==false){
//then it was found
}
如果你希望它忽略的情況下,使用stripos。
請注意,關於此的一個細微之處在於,如果針位於乾草堆的最開始位置,則在位置0處返回整數0。這意味着您必須使用嚴格比較與false
進行比較,否則可能會產生誤報。
如手冊中所指出的,上述
警告
這個函數可以返回布爾 FALSE聯繫,但也可以返回其評估一個 非布爾值到 FALSE,如0要麼 」」。有關更多 的信息,請參閱 關於布爾值的部分。使用===運算符 測試此 函數的返回值。
就使用數組而言,strpos意味着需要兩個字符串。使用數組將產生Warning: strpos() expects parameter 1 to be string, array given
或1警告:strpos():needle不是一個字符串或整數。
好吧,假設您有一組要搜索的字符串。
您可以
$needles=array('hose','fribb','pancake');
$haystack='Where are those pancakes??';
foreach($needles as $ndl){
if(strpos($haystack,$ndl)!==false){ echo "'$ndl': found<br>\n"; }
else{ echo "'$ndl' : not found<br>\n"; }
}
尋找一個字符串多個字符串,不使用數組...這只是告訴你至少一個是否找到匹配的另一種方式。
$haystack='Where are those pancakes??';
$match=preg_match('#(hose|fribb|pancake)#',$haystack);
//$match is now int(1)
或者,使用preg_match_all來查看總共有多少匹配。
因此,搜索項是一個正則表達式。 ()
將術語組合在一起,|
表示'或'。 #
表示模式的開始和結束。正則表達式可以很快變得相當複雜,但當然,它們工作正常!出於性能原因,通常會避免它們,但是如果您正在測試多個字符串,則可能比上述的數組循環方法更有效。我相信還有其他方法可以做到這一點。
來源
2010-07-18 19:51:27
JAL
好的,很好。但如果它是在一個數組中呢? (檢查編輯後)。 – MacMac 2010-07-18 20:12:52
你的意思是乾草堆是一個數組?還是針?查看PHP文檔 - 第一個註釋是當前'接受$針數組的strpos' – JAL 2010-07-18 20:42:19
本質上,您將不得不使用foreach遍歷數組,無論它是哪一個。如果你有很多'針'和'乾草堆',preg_match是一個可行的解決方案。 – JAL 2010-07-18 20:49:22