我有下面的代码,如果在变量$ 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>
答案 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);
}