У меня есть строка вроде этого:
$str = "it is a test";
Я хочу проверить это на эти слова: it
, test
. Я хочу, чтобы он возвращал true
если есть хотя бы одно из этих слов в строке.
Вот что я сделал: (хотя это не работает)
$keywords = array ('it', 'test'); if(strpos($str, $keywords) !== false){ echo 'true';} else echo 'false';
Как я могу это сделать?
просто проверяя использование preg_match
, вы можете добавить много разных слов в шаблон, просто используйте разделитель |
между словами
$str = "it is a test"; if (preg_match("[it|test]", $str) === 1) { echo "it matches"; }
Извините, я не знал, что вы имеете дело с другими языками, вы можете попробовать это
$str = "你好 abc efg"; if (preg_match("/\b(你好|test)\b/u", $str) === 1) { echo "it matches"; }
Я также должен упомянуть, что \b
означает границу слова, поэтому она будет соответствовать только точным словам
Самый простой способ – использовать функцию взрыва , это выглядит так:
$str = "it is a test"; // Remember your quotes! $keywords = array ('it', 'test'); $str_array = explode(" ", $str); $foundWords = []; foreach ($keywords as $key) { if (in_array($key, $str_array)) { $foundWords[] = $key; } } foreach($foundWords as $word) { print("Word '{$word}' was found in the string '{$str}'<br />"); }
Это также функция печати
Это дало мне результат:
Слово «это» было найдено в строке «это тест»,
Word 'test' был найден в строке «это тест»,
Я думаю, что проблема с вашим кодом заключается в том, что он пытается сопоставить массив в целом с строкой, попробуйте сделать это внутри цикла foreach
.
Другим способом может быть что-то вроде:
$keywords = array ('it', 'test'); echo (strpos($srt, $keywords[0]) ? "true" : "false"); echo (strpos($srt, $keywords[1]) ? "true" : "false");
Я не уверен, извините, я ошибаюсь. Я думаю, что strpos не работает с массивами?
Стараться сделать:
$array = ('it', 'test'); for($i=0;$i<$array.length;$i++){
//here the strpos Method but with $array[$i]
}