У меня есть следующий метод, который проверяет наличие слова 'example' в тексте, и если он находит его, он оборачивает его span:

function highlightWords($dreams) {
    $wrap_before = '<span class="highlight_match">';
    $wrap_after  = '</span>';
    $key_words = 'example';

    $dreams = json_decode($dreams);

    foreach ($dreams as &$value) {
        $value->dream = preg_replace("/($key_words)/i",
            "$wrap_before$1$wrap_after", $value->dream);
    }
    return $dreams;
}

Я попытался преобразовать переменную $key_words в массив, чтобы можно было указать несколько слов в качестве параметра, но это всегда возвращает ошибку. Могу ли я сделать это с таким подходом?

php
0
adamb 15 Окт 2018 в 00:26

1 ответ

Лучший ответ

Используйте implode(), чтобы преобразовать массив ключевых слов в строку, которая вы можете использовать в качестве регулярного выражения.

Похоже, вы хотите найти полное слово для одного из нескольких ключевых слов, поэтому используйте оператор чередования (символ |) в качестве разделителя.

Например, учитывая массив:

$key_words = ['foo', 'bar', 'baz'];
$key_words = implode('|', $key_words);

Дает следующую строку:

foo | bar | baz

Который затем можно использовать для создания регулярного выражения ключевых слов:

// /(foo|bar|baz)/i
preg_replace("/($key_words)/i", 
    "$wrap_before$1$wrap_after", $value->dream);

Надеюсь это поможет :)

0
Darragh Enright 15 Окт 2018 в 09:30