2010-07-18 66 views
5

如何在MySQL中使用LIKE函數(不使用MySQL)時搜索部分字符串,但在搜索字符串時使用PHP搜索部分字符串PHP

<?php  

$string = "Stackoverflow"; 

$find = "overfl"; 

if($find == $string) 
{ 
    return true; 
} 
else 
{ 
    return false 
} 

?> 

但是,這顯然會工作不會,但是有一個函數,您可以部分搜索字符串?這將是巨大的:)

編輯:

如果它是一個數組?

如果我使用strpos,它會回顯,如果我使用它,它會像truetruetruetruetrue。

回答

12

我傾向於使用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來查看總共有多少匹配。

​​

因此,搜索項是一個正則表達式。 ()將術語組合在一起,|表示'或'。 #表示模式的開始和結束。正則表達式可以很快變得相當複雜,但當然,它們工作正常!出於性能原因,通常會避免它們,但是如果您正在測試多個字符串,則可能比上述的數組循環方法更有效。我相信還有其他方法可以做到這一點。

+0

好的,很好。但如果它是在一個數組中呢? (檢查編輯後)。 – MacMac 2010-07-18 20:12:52

+0

你的意思是乾草堆是一個數組?還是針?查看PHP文檔 - 第一個註釋是當前'接受$針數組的strpos' – JAL 2010-07-18 20:42:19

+0

本質上,您將不得不使用foreach遍歷數組,無論它是哪一個。如果你有很多'針'和'乾草堆',preg_match是一個可行的解決方案。 – JAL 2010-07-18 20:49:22

3

的strstr()/ stristr()(後者是不區分大小寫)

if(strstr($string,$find)!==false){ 
    //true 
} 
3

strpos()可以做到這一點。

if(strpos($string, $find) !== false) 
. . . 

請注意,它可能會返回0,所以請使用type-equals運算符。

+1

當測試是否存在時,應該使用嚴格比較false('!== false')。 – BoltClock 2010-07-18 19:51:22

+0

是的,我在編輯的時候給了downvote。給一個男人幾秒鐘,好嗎? – 2010-07-18 19:52:41

+0

我認爲downvoter在編輯之前投了票。它已被撤銷,但顯然。不,我不是那個低調的人:) – BoltClock 2010-07-18 19:53:20