Проверить наличие нескольких слов в строке и показать найденные / не найденные слова - PullRequest
1 голос
/ 07 февраля 2020

Я проверяю наличие нескольких слов в строке, используя пример anubhava здесь. Однако я не уверен, как показать слова, которые найдены, и те, которые не найдены в строка. Есть идеи как этого добиться. Код, который я использую, выглядит следующим образом.

$bad_words = array("yo","hi");
$sentence = "yo you your";

preg_match_all('/\w+/', $sentence, $m);
echo ( array_diff ( $m[0], $bad_words ) === $m[0] ) ? "no bad words found\n" :
                                                      "bad words found\n";

1 Ответ

1 голос
/ 07 февраля 2020

Сначала вам нужно определить, что означает слово в этом контексте. Например, " блин " одно слово или два? Если вы ищете " pan ", должно ли оно возвращать значение true, если найдено " pancake "? Кроме того, " AI " слово? " 2020 " - это слово? А как насчет " fast-track "? Должен ли поиск быть чувствительным к регистру? Должен ли он включать частичные находки? Если вам нужен простой поиск по иголке / стогу сена, например strpos, решение тривиально.

$searchWords = ["yo","hi"];
$sentence    = "yo you your";
$wordsFound  = [];

foreach ($searchWords as $word) {
    if (stripos($sentence, $word) !== false) {
        $wordsFound[$word] = true;
    }
}

echo "Words found: ", implode(",", array_keys($wordsFound)); // Words found: yo

Чтобы найти слова, которые не были найдены в $searchWords, достаточно просто сделать $wordsNotFound = array_diff($searchWords, array_keys($wordsFound)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...