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;
       }
    }
}

ДЕМО: http://codepad.org/YtDlcQRA

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";
Другие вопросы по тегам