如何检查字符串的数组,并精确匹配

时间:2016-11-19 15:42:32

标签: php arrays strpos

我试图使用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,因此满足匹配USAFUSA都会产生以下输出:

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

必须要有一些东西,也许是preg_match()(我对PHP中的字符串比较非常不熟悉)或者可以告诉它只注意整个短语的东西,而不是挑出个人匹配的字符?

谢谢!

1 个答案:

答案 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;
        }
    }