2017-05-12 2 views
0

Dies ist mein aktueller Code:Wie Spiel und einige Schlüsselwörter in Zeichenfolge markiert mit php

# highlight keywords in string 
function highlight($string, $keyword) { 
    return preg_replace("/".preg_quote($keyword)."/ui", "<span class=\"h\">$0</span>", $string); 
} 

Wenn ich diesen Code ausführen:

$string = "The house is very big."; 
echo highlight($string, "hous"); 

Es wird zurück:

The <span class="h">hous</span>e is very big. 

Jetzt versuche ich, mehrere Schlüsselwörter zum zweiten Parameter der Funktion als ein Array zu senden, und alle diese Übereinstimmungen sollten markiert werden. Beispiel:

echo highlight($string, array("hous", "big"); 

... sollte zurück:

The <span class="h">hous</span>e is very <span class="h">big</span>. 

Irgendwelche Ideen? Vielen Dank.

+0

Das wird Spaß machen, wenn Sie es mit 'highlight ($ string, array nennen ("Haus", "Pan");': ungültige HTML kommt heraus. – trincot

Antwort

2

Überprüfen Sie, ob $keywords enthält ein Array von Werten, anstatt eines string Typ ist:

function highlight($string, $keywords) { 
    $keywords = is_array($keywords) 
     ? implode('|', array_map('preg_quote', $keywords)) 
     : preg_quote($keywords); 
    return preg_replace("/$keywords/ui", "<span class=\"h\">$0</span>", $string); 
} 

PHP live demo

1

Sie einfach dies tun könnte:

function highlight($string, $keywords) { 
    return preg_replace("/".implode('|', $keywords)."/ui", "<span class=\"h\">$0</span>", $string); 
} 

$string = "The house is very big."; 
echo highlight($string, ["hous", "big"]); 

Hinweis: implode('|', $keywords) da die | Rohrsymbol würde Ihnen eine solche Flexibilität ermöglichen.

Weitere Informationen finden sich: http://www.regular-expressions.info/alternation.html

Verwandte Themen