2016-11-19 93 views
1

我試圖使用strpos()來搜索特定的單詞一個PHP字符串,作爲函數嗅出了用戶的美軍服務和顯示的一部分感謝他們的服務。問題是,美國空軍(USAF)的老兵,將出現消息兩次因爲它也嗅着了「USA」部分(這是美國陸軍老兵單獨的縮寫。)如何檢查字符串字數組,匹配它恰恰

$p1Name = "Mr. John Smith"; 
$p2Name = "SSgt. John Doe, USAF"; 
$milbranches = array("USAF", "USMC", "USCG", "USN", "USA"); 
foreach ($milbranches as $mil) 
    { 
    if(strpos($p1Name, $mil) !== FALSE OR strpos($p2Name, $mil) !== FALSE) 
     { 
     echo "Thank you for your service."; 
     } 
    } 

OR語句從任一$p1Name$p2Name嗅出了這一點顯得做工精細,但由於$p2Name在這個實例包含USAF,因此滿足兩個USAFUSA匹配,這會產生的輸出:

Thank you for your service.Thank you for your service.

必須有一些東西,也許與preg_match()(我很不熟悉PHP中的字符串比較),或者可以告訴它只關注整個短語,而不是挑選出個人匹配的字符?

謝謝!當它擊中第一重合

回答

3

打破foreach循環。

$p1Name = "Mr. John Smith"; 
$p2Name = "SSgt. John Doe, USAF"; 
$milbranches = array("USAF", "USMC", "USCG", "USN", "USA"); 
foreach ($milbranches as $mil) 
    { 
    if(strpos($p1Name, $mil) !== FALSE OR strpos($p2Name, $mil) !== FALSE) 
     { 
     echo "Thank you for your service."; 
     break; 
     } 
    } 
+0

我知道這會很簡單!這工作,謝謝。我嘗試設置一個變量'$ thanksShown = 1;',其中你的'break;'是最初的位置,然後試圖在條件語句中放置'&&!isset($ thanksShown)',但這不起作用。儘管如此,所以,再次感謝! –

+0

然後,您必須保持數組排序。這意味着美國必須在美國空軍之後,否則美國空軍將永遠不會被發現,但從這個意義上講,你是我的,甚至不包括美國,除非他們想爲每個分支做一些獨特的事情。所以這不是完美的,但在這種情況下會起作用。 – Mike

+1

錯誤在於在字符串p2Name中查找USA和USAF的代碼。 – 2016-11-19 15:51:46

相關問題