2016-11-19 83 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

相关问题