在我的网站上,有一个选项可以搜索已归档的文章。它工作正常,但我现在想做的是在结果预览的片段中突出显示匹配的单词(就像谷歌一样)。
$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
当前结果的预览片段的文本在哪里。所以基本上,如果一个单词匹配(不区分大小写),它就会被一个strong element包围。
我的问题是:有没有办法进一步优化?因为这个脚本O(n^2)
(因为 for 循环中的preg_grep调用)是针对每个结果执行的,所以整个脚本都是O(n^3)
. 在实际情况下O(n^3)
很多。