我正在开展迷你项目,其中描述中的文字在网页上突出显示。关键字由用户动态输入到数据库中。
在向网页显示数据时,会从数据库中选择说明和关键字,并突出显示与关键字匹配的说明中的字词。
数据库图片:
表名信息
表名关键字
这是代码
<?php
$link = new mysqli('localhost','root','','example');
if($link->connect_error){
die("Connection Failed".$link->connect_error);
}
?>
<!DOCTYPE html>
<html>
<head>
<style>
.highlight{
color:green;
background:yellow;
}
</style>
</head>
<body>
<?php
//select keywords
$sql = "SELECT keywords FROM keywords";
if($res = $link->query($sql)){
while($row = $res->fetch_assoc()){
$keyword[] =array(
'name'=>$row['keywords'],
);
}
}
else
{
echo "Error".$link->error;
}
//get the description
$Query = "SELECT * FROM information";
if($result = $link->query($Query)){
while($rows = $result->fetch_assoc()){
echo $rows['description']."<br><br><br>";
}
}
else
{
echo "error".$link->error;
}
?>
</body>
</html>
现在这里是如何显示
答案 0 :(得分:0)
要获取关键字数组,您需要创建一个空数组,然后推送数组以输入值,而不是每次循环时创建一个空数组,这将覆盖前一个数组。
//select keywords
$keywords=[];
$sql = "SELECT keywords FROM keywords";
if($res = $link->query($sql)){
while($row = $res->fetch_assoc()){
keywords[]=$row['keywords'];
}
}
else
{
echo "Error".$link->error;
}
要格式化它,现在你有一个关键字数组,相当困难,因为str_replace对数组不友好,但我认为这应该有效。
//get the description
$Query = "SELECT * FROM information";
if($result = $link->query($Query)){
while($rows = $result->fetch_assoc()){
foreach($keywords as $i){
str_ireplace($i, "<span class='highlight'>$i</span>", $rows['description']);
}
}
}
else
{
echo "error".$link->error;
}
现在,我没有测试这段代码,所以如果它没有按预期工作就不要杀了我:P
EDITED:关键字搜索现在不区分大小写了,我这样做是为了搜索文本中的关键字而不是整行的数组。
编辑2:请注意,使用此代码,突出显示的单词的情况将始终为小写,无论如何。如果您愿意,可以更改突出显示样式以解决此问题。 即。
.highlight{
background-color: yellow;
text-transform: uppercase;
}
已编辑3:性能增强,将array_push();
替换为作业。
答案 1 :(得分:0)
我在谷歌上搜索,发现了一个类似于你的问题 - highlight multiple keywords in search。我编辑了接受的答案以适合您的代码。
function highlight($text, $keywords) {
$re = '~\\b(' . implode('|', $keywords) . ')\\b~';
return preg_replace($re, "<span class='highlight'>$0</span>", $text);
}
$Query = "SELECT * FROM information";
if($result = $link->query($Query)){
while($rows = $result->fetch_assoc()){
$highlighted = highlight($rows['description'], $keywords);
echo $highlighted . "<br><br><br>";
}
}