2016-11-19 19 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したがってUSAFUSA両方の一致を満たす、USAFが含まれているため、これはの出力が得られます

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

私はそれが単純なものであることを知っていました!これはうまくいった。あなたの 'break;'が最初にあった変数 '$ thanksShown = 1; 'を設定しようとしましたが、' &&!isset($ thanksShown) 'を条件文に入れようとしましたが、うまくいきませんでした。しかし、これはもう一度ありがとう! –

+0

次に、配列をソートしたままにしておく必要があります。アメリカはUSAFの後になければなりません。さもなければ、USAFは決して見つけられません。しかし、この意味では、各支店や何かにユニークな何かをしたいのでなければ、USAも含めて鉱山しています。完璧ではありませんが、この場合はうまくいくでしょう。 – Mike

+1

エラーは、USAとUSAFの両方をp2Nameという文字列で検索するコードにあります。 –

関連する問題