文字列内の単一の単語を強調表示する関数を作成しました。次のようになります。
function highlight($input, $keywords) {
preg_match_all('~[\w\'"-]+~', $keywords, $match);
if(!$match) { return $input; }
$result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';
return preg_replace($result, '<strong>$0</strong>', $input);
}
検索でスペースをサポートするさまざまな単語の配列を操作する関数が必要です。
例:
$search = array("this needs", "here", "can high-light the text");
$string = "This needs to be in here so that the search variable can high-light the text";
echo highlight($string, $search);
これまでのところ、必要に応じて機能するように機能を修正するために持っているものは次のとおりです。
function highlight($input, $keywords) {
foreach($keywords as $keyword) {
preg_match_all('~[\w\'"-]+~', $keyword, $match);
if(!$match) { return $input; }
$result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';
$output .= preg_replace($result, '<strong>$0</strong>', $keyword);
}
return $output;
}
明らかにこれは機能せず、これを機能させる方法もわかりません (正規表現は私の得意分野ではありません)。
問題になる可能性のあるもう 1 つの点は、関数が複数の一致をどのように処理するかということです。$search = array("in here", "here so");
結果は次のようになります。
This needs to be <strong>in <strong>here</strong> so</strong> that the search variable can high-light the text
ただし、これは次のようにする必要があります。
This needs to be <strong>in here so</strong> that the search variable can high-light the text