PHP: разные способы проверить, содержит ли строка слова из массива

В PHP обычной задачей является проверка, содержит ли строка какие-либо слова, присутствующие в массиве. Это может быть полезно в различных сценариях, таких как проверка ввода пользователя, фильтрация контента или реализация функции поиска. В этой статье мы рассмотрим несколько методов выполнения этой задачи, предоставив вам практические примеры кода и разговорные объяснения.

Метод 1: использование цикла
Один простой подход — перебрать каждое слово в массиве и проверить, существует ли оно в заданной строке. Вот пример:

function stringContainsWords($string, $wordsArray) {
    foreach ($wordsArray as $word) {
        if (strpos($string, $word) !== false) {
            return true;
        }
    }
    return false;
}
// Usage
$string = "This is a sample string";
$wordsArray = ["sample", "foo", "bar"];
if (stringContainsWords($string, $wordsArray)) {
    echo "The string contains at least one word from the array.";
} else {
    echo "The string does not contain any word from the array.";
}

Метод 2: использование регулярных выражений
Регулярные выражения предоставляют мощный способ поиска шаблонов в строках. Мы можем построить шаблон регулярного выражения, используя слова из массива, и выполнить сопоставление со строкой. Вот пример:

function stringContainsWordsRegex($string, $wordsArray) {
    $pattern = '/' . implode('|', $wordsArray) . '/i';
    return preg_match($pattern, $string);
}
// Usage
$string = "This is a sample string";
$wordsArray = ["sample", "foo", "bar"];
if (stringContainsWordsRegex($string, $wordsArray)) {
    echo "The string contains at least one word from the array.";
} else {
    echo "The string does not contain any word from the array.";
}

Метод 3: использование функции array_intersect()
Другой вариант — использовать функцию array_intersect(), которая возвращает совпадающие элементы между двумя массивами. В этом случае мы можем преобразовать строку в массив слов и использовать array_intersect()для проверки наличия общих элементов с массивом слов. Вот пример:

function stringContainsWordsIntersect($string, $wordsArray) {
    $stringWords = explode(' ', $string);
    return !empty(array_intersect($stringWords, $wordsArray));
}
// Usage
$string = "This is a sample string";
$wordsArray = ["sample", "foo", "bar"];
if (stringContainsWordsIntersect($string, $wordsArray)) {
    echo "The string contains at least one word from the array.";
} else {
    echo "The string does not contain any word from the array.";
}

В этой статье мы рассмотрели три различных метода проверки наличия в строке слов из массива в PHP. Используя цикл, регулярные выражения или функцию array_intersect(), вы можете найти наиболее подходящий подход для вашего конкретного случая использования. При выборе метода, который лучше всего соответствует вашим требованиям, не забывайте учитывать такие факторы, как производительность, чувствительность к регистру и границы слов.

Освоив эти методы, вы получите необходимые инструменты для эффективного поиска слов в строке и повышения функциональности ваших приложений PHP.