Обновление:
Независимым от границы слова решением было бы добавить пробелы вокруг входной строки и поисковых слов:
$str = ' ' . $str . ' ';
function quote($a) {
return ' ' . preg_quote($a, '/') . ' ';
}
$word_pattern = '/' . implode('|', array_map('quote', $array)) . '/';
if(preg_match($word_pattern, $str) > 0) {
}
или циклически перебирая термины:
foreach($array as $term) {
if (strpos($str, ' '. $term . ' ') !== false) {
// word contained
}
}
Оба могут быть помещены в функцию для упрощения использования, например,
function contains($needle, $haystack) {
$haystack = ' ' . $haystack . ' ';
foreach($needle as $term) {
if(strpos($haystack, ' ' . $term . ' ') !== false) {
return true;
}
}
return false;
}
Посмотрите на DEMO
Старый ответ:
Вы можете использовать регулярные выражения:
function quote($a) {
return preg_quote($a, '/');
}
$word_pattern = implode('|', array_map('quote', $array));
if(preg_match('/\b' . $word_pattern . '\b/', $str) > 0) {
}
Важной частью являются граничные символы \b
здесь. Вы получите совпадение только в том случае, если искомым значением является (последовательность) слово (а) в строке.