PHP: как сравнить любое слово существует в 2 строки
Мой случай таков:
<?php
$var1 = "Top of British";
$var2 = "Welcome to British, the TOP country in the world";
$var1 = strtolower($var1);
$var2 = strtolower($var2);
if (strpos($var1, $var2) !== FALSE) {
echo "TRUE";
}
?>
это не работает, как я могу определить ТОП или британский существует на обеих строках?
4 ответа
Решение
Удалите знаки препинания из строк, преобразуйте их в нижний регистр, разбейте каждую строку на символе пробела в массив строк, а затем переберите все строки в поисках совпадений:
$var1 = preg_replace('/[.,]/', '', "Top of British");
$var2 = preg_replace('/[.,]/', '', "Welcome to British, the TOP country in the world");
$words1 = explode(" ",strtolower($var1));
$words2 = explode(" ",strtolower($var2));
foreach ($words1 as $word1) {
foreach ($words2 as $word2) {
if ($word1 == $word2) {
echo $word1."\n";
break;
}
}
}
PHP имеет функцию для поиска элементов, которые являются членами двух массивов:
$var1 = explode(" ", strtolower("Top of British"));
$var2 = explode(" ", strtolower("Welcome to British, the TOP country in the world"));
var_dump(array_intersect($var1, $var2)); // array(1) { [0]=> string(3) "top" }
Чтобы найти ТОП или БРИТАНСКИЙ в строке
<?php
$var1 = "Top of British";
$var2 = "Welcome to British, the TOP country in the world";
$var1 = strtolower($var1);
$var2 = strtolower($var2);
if (strpos($var1, 'top') && strpos($var1, 'british')) {
echo "Either the word TOP or the word BRITISH was found in string 1";
}
?>
В более общем случае сопоставлять слова в строке 2 со словами в строке 1
<?php
$var1 = explode(' ', strtolower("Top of British"));
$var2 = "Welcome to British, the TOP country in the world";
$var2 = strtolower($var2);
foreach($var1 as $needle) if (strpos($var2, $needle)) echo "At least one word in str1 was found in str 2";
?>
Общий пример проверки пересечения слов во фразах... вы можете проверить в результате любые устаревшие стоп-слова, такие как "of" или "to"
<?php
$var1 = "Top of British";
$var2 = "Welcome to British, the TOP country in the world";
$words1 = explode(' ', strtolower($var1));
$words2 = explode(' ', strtolower($var2));
$iWords = array_intersect($words1, $words2);
if(in_array('british', $iWords ) && in_array('top', $iWords))
echo "true";