如何在匹配和不匹配字符串的关键字中添加一些HTML

时间:2019-02-23 18:44:16

标签: php html

我有下面的代码,如果在变量$ text中找到了变量$ keywords,则在变量$ keywords中的关键字旁边添加了一个绿色的勾号,因此是Microsoft和Intel。现在这可以正常工作,但我还想在与$ text(即诺基亚)中的关键字不匹配的关键字旁边添加一个红色的勾号。因此,所需的输出应该是Microsoft和Intel旁边的绿色对勾,以及诺基亚旁边的红色对勾。

<?php

$text = array("microsoft","intel","nokia");
$keywords = array("microsoft","intel");

foreach ($text as $str) {

  foreach ($keywords as $keyword)

     $str = preg_replace("~(?<!\w)".preg_quote($keyword, "/")."\$~i", "<i class='fa fa-check-circle' style='font-size:15px;color:green'></i> $0</span>", $str);

     $string[] = $str;

}
?>

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<?php

foreach ($string as $strings) {

echo $strings.'<br>';

}

?>

</body>
</html> 

2 个答案:

答案 0 :(得分:0)

我不会为该任务使用正则表达式。

代替将关键字作为数组的键(而不是值),这样可以更快地进行查找,然后仅检查字符串是否在该数组中(作为键)。如果是这样,请将颜色变量设置为绿色,否则设置为红色。然后在单词中添加相应的刻度符号:

$text = array("microsoft","intel","nokia");
$keywords = array_flip(array("microsoft","intel"));

foreach ($text as $str) {
    $color = isset($keywords[$str]) ? "green" : "red";
    $string[] = "<i class='fa fa-check-circle' style='font-size:15px;color:$color'></i> $str";
}

foreach ($string as $strings) {
    echo "$strings<br>\n";
}

答案 1 :(得分:0)

我稍微简化了脚本,这里不需要正则表达式,您只需检查所需的字符串是否在关键字数组中即可

$text = array("microsoft","intel","nokia");
$keywords = array("microsoft","intel");

foreach ($text as $str) {
    $color = in_array($str, $keywords) ? 'green' : 'red';
    $string[] = sprintf("<i class='fa fa-check-circle' style='font-size:15px;color:%s'></i> %s</span>", $color, $str);
}