私のウェブサイトには、アーカイブされた記事を検索するオプションがあります。それはうまく機能しますが、私が今やりたいのは、結果プレビューのスニペットで一致する単語を強調表示することです(Googleのように)。
$keywords = explode( $query );
$keywords
検索クエリのキーワードを保存します。そして、表示する各結果を準備するときに、次のことを行います。
$exploded = explode( ' ', $text );
$count = count( $exploded );
$text = ''; // clears the text
for ( $i = 0; $i < $count; $i++ ) {
if ( preg_grep( "/{$exploded[$i]}/i", $keywords ) ) {
$exploded[$i] = '<strong>' . $exploded[$i] . '</strong>';
}
$text .= $exploded[$i] . ' ';
}
$text
現在の結果のプレビュースニペットのテキストはどこにありますか。したがって、基本的に、単語が一致する場合(大文字と小文字は区別されません)、強い要素に囲まれます。
私の質問は:これをさらに最適化する方法はありますか?このスクリプトはO(n^2)
(forループ内でpreg_grepが呼び出されるため)、結果ごとに実行されるため、スクリプト全体が作成されますO(n^3)
。そして、実際の状況でO(n^3)
はたくさんあります。