Php 如何检查字符串中的单词数组,使其精确匹配

Php 如何检查字符串中的单词数组,使其精确匹配,php,arrays,strpos,Php,Arrays,Strpos,我试图使用strpos()搜索PHP字符串中的特定单词,作为一个函数的一部分,它可以嗅出用户的美国军事服务,并显示一条感谢他们服务的消息。问题是,对于美国空军(USAF)退伍军人来说,该消息出现两次,因为它还嗅出了“USA”部分(这是美国陆军退伍军人的一个单独首字母缩写) 用于从$p1Name或$p2Name中嗅出这一点的OR语句似乎工作正常,但由于本例中$p2Name包含USAF,因此满足USAF和USA的匹配,这将产生以下输出: 感谢您的服务。感谢您的服务。 必须有一些东西,可能是preg_

我试图使用strpos()搜索PHP字符串中的特定单词,作为一个函数的一部分,它可以嗅出用户的美国军事服务,并显示一条感谢他们服务的消息。问题是,对于美国空军(USAF)退伍军人来说,该消息出现两次,因为它还嗅出了“USA”部分(这是美国陆军退伍军人的一个单独首字母缩写)

用于从
$p1Name
$p2Name
中嗅出这一点的OR语句似乎工作正常,但由于本例中
$p2Name
包含
USAF
,因此满足
USAF
USA
的匹配,这将产生以下输出:

感谢您的服务。感谢您的服务。

必须有一些东西,可能是preg_match()(我对PHP中的字符串比较非常不熟悉),或者可以告诉它只注意短语的整体,而不选择匹配的单个字符


谢谢大家!

当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;
        }
    }

我就知道事情会这么简单!这很有效,谢谢。我尝试设置一个变量
$Thankshown=1您的
中断位置最初是,然后尝试放置
&&!在条件语句中设置($Thankshown)
,但这不起作用。不过,这的确如此,所以,再次感谢!然后必须对数组进行排序。这意味着美国必须在阵列中紧跟美国空军,否则美国空军将永远找不到,但从这个意义上说,你甚至不包括美国,除非他们想为每个分支机构或其他机构做一些独特的事情。因此它并不完美,但在这种情况下可以工作。错误在于代码在字符串p2Name中同时查找USA和USAF。此外,您还可以摆脱USAF,因为USA覆盖了USAF,从而获得性能节约循环,正如@Mike所解释的。
$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;
        }
    }