2017-05-12 16 views
0

と文字列のいくつかのキーワードをマーク:私はこのコードを実行するとどのようにマッチし、これは私の現在のコードでPHP

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

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

は、それが返されます:

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

今私は配列として関数の2番目のパラメータにいくつかのキーワードを送信しようとしているすべてのそれらの一致を強調表示する必要があります。例:

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

は...返す必要があります:

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

任意のアイデア?ありがとう。

+0

を);':無効なHTMLが出てきます。 – trincot

答えて

2

チェック$keywordsはむしろstringタイプのものよりも値の配列が含まれているとしますので、implode('|', $keywords)

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"]); 

注:

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

あなたは、単にこれを行うことができます|パイプシンボルを使用すると、柔軟性が得られます。

より洞察は、以下を参照してください:あなたはハイライト($文字列、配列(「家」、「パン」 `でそれを呼び出すときの楽しみになりますhttp://www.regular-expressions.info/alternation.html

関連する問題