2017-09-01 139 views
-2

我正在寻找一种快速方法来突出显示文本字符串,如果它有一个标志,即(-R)作为第一个符号,从开始到结束\ n)的。用php突出显示HTML CSS中的文本字符串

该函数将被赋予一个多个字符串的文本,以“\ n”分隔,可能包含或不包含任何标记。事情是这样的:

-Rnotes to be red 
-Ynotes to be yellow 
-G notes to be green 

在这个函数的输出,我需要得到这个:

<span style="background-color:red">notes to be red</span> 
<span style="background-color:yellow">notes to be yellow</span> 
<span style="background-color:green"> notes to be green</span> 
+0

如果页面已经加载,javascript会更好用 – clearshot66

+0

As @ clearshot66提到使用javascript。您可以使用switch语句并使用susbtring来获得字母 – ctwheels

+0

另外,如果它们可能或不可能以标志开始,那么阻止用户在注释之前输入-R并且可能会弄乱某些东西? – ctwheels

回答

0

你可以尝试一些链接这样的:

$notes = array(
    '-Rnote', 
    '-Gnote', 
    '-Ynote', 
    '-Rnote1', 
    '-Gnote1', 
    '-Ynote1', 
); 

$colors = array(
    'R' => 'red', 
    'G' => 'green', 
    'Y' => 'yellow', 
); 

foreach ($notes as $note) { 

    $color_key = substr($note, 1, 1); 
    $note_string = substr($note, 2); 

    $bg_color = array_key_exists($color_key, $colors) ? $colors[$color_key] : ''; 
    echo '<p style="background-color:' . $bg_color . '">' . $note_string . '</p>'; 
} 

在关联存储你的颜色数组可能会使未来添加更多颜色变得容易。

这可能有点混乱,但它应该适合你。

+1

好的!但我认为它应该是这样的https://3v4l.org/kTHkX在范围 – Andreas

+0

中输出“注释”您可能是对的。我想我只是为了测试而做了这件事,忘了把它放回去。 – Matt

+1

很抱歉更新了链接我不小心使用了$ note,你已经使用的变量 – Andreas

1

基于马特的回答我做出了这个答案。
请记住,这是Matt的想法,因此如果你喜欢这个,请不要忘记提高他的答案。

我使用str_replace用span标记替换-R(或Y或G),并使用-R作为颜色数组中的键。
然后我只是添加闭合跨度标签。

$notes = array(
    '-Rnote', 
    '-Gnote', 
    '-Ynote', 
    '-Rnote1', 
    '-Gnote1', 
    '-Ynote1', 
); 
// Above array can be replaced by: 
// $notes = explode("\n", $text); 

$colors = array(
    '-R' => 'red', 
    '-G' => 'green', 
    '-Y' => 'yellow', 
); 

foreach ($notes as $note) { 
    If (isset($colors[substr($note,0,2)])){ 
     echo str_replace(substr($note, 0, 2), '<span style="background-color:' . $colors[substr($note, 0, 2)] . '">', $note) . "</span>\n"; 
    }Else{ 
     Echo $note ."\n"; 
    } 
} 

https://3v4l.org/9YDAX

编辑注意到我怎么忘了,有可能无法在字符串中的彩色标签。
增加了一个没有颜色注释的回显

+0

这是更好的非正则表达式方法。查找数组是此任务的最佳实践。 – mickmackusa