我试图使用strpos()在PHP字符串中搜索特定的单词,作为嗅出用户的美国军队服务的一部分,并显示一条消息,感谢他们提供服务。问题是,对于美国空军(美国空军)的退伍军人来说,消息显示两次,因为它也会嗅出" 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.";
}
}
从$p1Name
或$p2Name
嗅出来的OR语句似乎工作正常,但因为此实例中的$p2Name
包含USAF
,因此满足匹配USAF
和USA
都会产生以下输出:
Thank you for your service.Thank you for your service.
必须要有一些东西,也许是preg_match()(我对PHP中的字符串比较非常不熟悉)或者可以告诉它只注意整个短语的东西,而不是挑出个人匹配的字符?
谢谢!
答案 0 :(得分: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;
}
}