Я пытаюсь использовать strpos() для поиска строки PHP для определенных слов, как часть функции, чтобы вынюхать американскую военную службу и отображать сообщение, благодарное им за их обслуживание. Проблема заключается в том, для ВВС США (USAF) ветеранов, появляется сообщение дважды, потому что он также пронюхивает в «США» часть (которая является отдельной аббревиатурой США армии ветеранов.)Как проверить строку для массива слов, точно совпадающих с ней
$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
, поэтому удовлетворяющую матч для обоих USAF
и USA
, это дает выход:
Thank you for your service.Thank you for your service.
Должно быть что-то, может быть, с preg_match() (я очень незнакомо со строковым сравнением в PHP) или что-то, что может сказать ему только обратить внимание на всю полноту фразы, а не выделять отдельные символы, которые соответствуют?
Спасибо!
Я знал, что это будет что-то просто! Это сработало, спасибо. Я попытался установить переменную '$ thanksShown = 1;' где ваш 'break;' изначально, а затем попытался поместить '&&! Isset ($ thanksShown)' в условное выражение, но это не сработало. Это все-таки так, спасибо! –
Затем вы должны сохранить сортировку массива. Значение США должно быть после USAF в массиве, в противном случае USAF никогда не будет найден, но в этом смысле вы также не включаете США, если только они не хотят делать что-то уникальное для каждой ветки или чего-то еще. Так что это не идеально, но будет работать в этом случае. – Mike
Ошибка заключается в том, что код находится как в США, так и в USAF в строке p2Name. –