arrays
包含很多单词。CSS
样式应用于文字我有一个str_replace
的例子,它有效,但不是全文。
$result['avisits']
,$result['avisPronoums']
和$result['avisWordsUser']
是包含"\n"
字符串的字符串,用于数据库。
$result['avis']
是一个包含文本的字符串,我想替换单词
$arr1 = explode("\n", $result['avisits']);
$arr2 = $arr1;
for($i = 0; $i < count($arr1); ++$i) {
$arr1[$i] = "<font color='red'><u>".$arr1[$i]."</u></font>";
}
$avis = str_replace($arr2, $arr1, $result['avis']);
$arr3 = explode("\n", $result['avisPronoums']);
$arr4 = $arr3;
for($i = 0; $i < count($arr3); ++$i) {
$arr3[$i] = "<span style='background:Yellow'>".$arr3[$i]."</span>";
}
$avis2 = str_replace($arr4, $arr3, $avis);
$arr5 = explode("\n", $result['avisWordsUser']);
$arr6 = $arr5;
for($i = 0; $i < count($arr5); ++$i) {
$arr5[$i] = "<span style='background:GreenYellow'>".$arr5[$i]."</span>";
}
$avis3 = str_replace($arr6, $arr5, $avis2);
答案 0 :(得分:1)
str_replace()
不够聪明,无法确定什么是“整个单词”;您需要使用preg_replace()
:
$avis = preg_replace(sprintf('/\b%s\b/', preg_quote($arr2)), $arr1, $result['avis']);
// ...
$avis2 = preg_replace(sprintf('/\b%s\b/', preg_quote($arr4)), $arr3, $avis);
// ...
$avis3 = preg_replace(sprintf('/\b%s\b/', preg_quote($arr6)), $arr5, $avis2);
答案 1 :(得分:1)
因此,如果我理解正确$result['avis']
,您希望逐字格式化字符串?
您可以尝试使用' '
来展开您的文字,这会将其与文字分开,然后逐字进行直接比较,然后再将其内爆。
$avis = explode(' ', $result['avis']);
$cnt = count($avis); // Don't use count() in your for loops it is a huge perfomance hit
for($i=0; $i < $cnt; $i++){
if(in_array($avis[$i], $arr1)){
$avis[$i] = "<font color='red'><u>".$avis[$i]."</u></font>";
}
elseif(in_array($avis[$i], $arr3))...
// Do the other replacements here
}
$avis = implode(' ', $avis);