Aktualisierung:
Eine wortgrenzenunabhängige Lösung wäre das Hinzufügen von Leerzeichen um die Eingabezeichenfolge und die Suchbegriffe:
$str = ' ' . $str . ' ';
function quote($a) {
return ' ' . preg_quote($a, '/') . ' ';
}
$word_pattern = '/' . implode('|', array_map('quote', $array)) . '/';
if(preg_match($word_pattern, $str) > 0) {
}
oder durch eine Schleife über die Begriffe:
foreach($array as $term) {
if (strpos($str, ' '. $term . ' ') !== false) {
// word contained
}
}
Beide können zur Vereinfachung der Nutzung in eine Funktion eingefügt werden, z. B.
function contains($needle, $haystack) {
$haystack = ' ' . $haystack . ' ';
foreach($needle as $term) {
if(strpos($haystack, ' ' . $term . ' ') !== false) {
return true;
}
}
return false;
}
Schauen Sie sich eine DEMO
Alte Antwort:
Sie können reguläre Ausdrücke verwenden:
function quote($a) {
return preg_quote($a, '/');
}
$word_pattern = implode('|', array_map('quote', $array));
if(preg_match('/\b' . $word_pattern . '\b/', $str) > 0) {
}
Der wichtigste Teil sind die Grenzzeichen \b
hier. Sie erhalten nur dann eine Übereinstimmung, wenn der gesuchte Wert ein (eine Folge von) Wort(en) in der Zeichenfolge ist.