我希望有人能够给我一个正确方向的推动,我正在构建一个搜索功能(PHP和MySQL),它将显示搜索结果并突出显示用户搜索的关键字。目前,我获取了用户输入的搜索条件,并查询数据库以获得所需的结果,这方面已经很好用了。但是问题在于:
$highlight = preg_replace("/".$_GET['criteria']."/", "<span class='highlight'>".$_GET['criteria']."</span>", $_row['name']);
这只会突出显示一个短语,而不是单个关键字。例如,如果文档名为“Hello world”,用户输入完全相同的内容,则可以轻松突出显示;但是,如果用户输入“world hello”,则不会突出显示任何内容。我认为,将搜索条件使用explode分割成每个单词并逐个检查似乎是一个好主意,但这似乎也失败了。以下是我的查询和结果显示方式:
$sql = "SELECT *
FROM uploaded_documents
WHERE dept_cat = 'procedures'
AND cat =:cat
AND keywords REGEXP :term ";
$result->execute(array(':cat' => $_GET['category'],':term' => $_GET['criteria']));
//display results
while($row = $stmt->fetch()){
$explode_criteria = explode(" ",$_GET['criteria']);
foreach($explode_criteria as $key){
$highlight = preg_replace("/".$key."/", "<span class='highlight'>".$key."</span>", $row['name']);
echo '<td><a target="_blank" href="'.$row['url'].'">'.$highlight.'</a></td>';
echo '<td>'.$row['version'].'</td>';
echo '<td>'.$row['cat'].'</td>';
echo '<td>'.$row['author'].'</td>';
echo '<td>'.$row['added'].'</td>';
echo '<td>'.$row['auth_dept'].'</td>';
echo '<td>';
}
}
为了简洁起见,我省略了代码并尽量减少了篇幅。我一直在尝试基于以下帖子进行工作:highlighting search results in php/mysql。
我认为我的第一个问题是while循环中的foreach循环会导致结果重复,但我想不出解决方法。
提前感谢您的帮助。