2016-11-19 1 views
1

Я пытаюсь использовать 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) или что-то, что может сказать ему только обратить внимание на всю полноту фразы, а не выделять отдельные символы, которые соответствуют?

Спасибо!

ответ

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

Затем вы должны сохранить сортировку массива. Значение США должно быть после USAF в массиве, в противном случае USAF никогда не будет найден, но в этом смысле вы также не включаете США, если только они не хотят делать что-то уникальное для каждой ветки или чего-то еще. Так что это не идеально, но будет работать в этом случае. – Mike

+1

Ошибка заключается в том, что код находится как в США, так и в USAF в строке p2Name. –

Смежные вопросы