str_replace整个单词

时间:2016-04-29 09:52:16

标签: php str-replace

  • 我有很多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);

2 个答案:

答案 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);