2017-09-01 1 views
-2

Ich suche nach einer schnellen Möglichkeit, eine Textzeichenfolge hervorzuheben, wenn es ein Flag ie (-R) als ein erstes Symbol darin, von Anfang bis Ende der Zeile (\ n).Markieren Sie die Textzeichenfolge in HTML CSS mit PHP

Die Funktion erhält einen Text aus mehreren Strings, getrennt durch "\ n", die überhaupt keine Flags enthalten dürfen. Etwas wie folgt aus:

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

In der Ausgabe dieser Funktion muss ich diese bekommen:

<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 wäre besser, wenn die Seite bereits geladen ist – clearshot66

+0

Als @ clearshot66 erwähnt Javascript verwenden. Sie können eine switch-Anweisung verwenden und verwenden Sie susbtring, um den Buchstaben – ctwheels

+0

Auch, wenn sie oder möglicherweise nicht mit einem Flag beginnen, was verhindert ein Benutzer von Eingabe von -R vor ihrer Notiz und möglicherweise etwas durcheinander bringen? – ctwheels

Antwort

0

Sie etwas Link versuchen könnte diese:

$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>'; 
} 

Speichern Ihrer Farben in einem assoziativen Array kann es in Zukunft einfacher machen, weitere Farben hinzuzufügen.

Dies könnte ein wenig chaotisch sein, aber es sollte für Sie arbeiten.

+1

Gute Eins! Aber ich denke, es sollte so sein https://3v4l.org/kTHkX Ausgabe der "Note" in der Spannweite – Andreas

+0

Sie haben wahrscheinlich Recht. Ich denke, ich habe das nur zum Testen gemacht und vergessen, es zurückzusetzen. – Matt

+1

Sorry den Link aktualisiert Ich habe versehentlich $ note verwendet, eine Variable, die Sie bereits verwendet – Andreas

1

Basierend auf Matts Antwort habe ich diese Antwort gegeben.
Denken Sie daran, es ist Matts Idee, die es basiert, also vergessen Sie nicht, seine Antwort zu verbessern, wenn Sie dies mögen.

Ich benutze str_replace zu ersetzen -R (oder Y oder G) mit dem span-Tag und verwenden Sie die -R als Schlüssel in Farb-Array.
Dann füge ich nur das Schließen des Span-Tags hinzu.

$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

bearbeiten bemerkt, wie ich vergessen, dass es keine Farbmarkierung in der Zeichenfolge sein kann.
Ein Echo von keine Farbnotizen hinzugefügt

+0

Dies ist der bessere Ansatz ohne Regex. Ein Sucharray ist die beste Vorgehensweise für diese Aufgabe. – mickmackusa