2017-02-19 11 views
0

配列を使用して一致する文字列があり、一致するものがあれば同じ単語に置き換えたいが、 1つのピースに含まれている色付きの単語ですべての文字列を返します。配列の値に一致する文字列内のすべての文字を置換する

$string = 'This is a brovn fox wit legs.'; 
$misspelledOnes = array('wit', 'brovn'); 

    echo '<p>' . str_replace($misspelledOnes,"<span style='color:red'>". $misspelledOnes . "</span>". '</p>', $string; 

しかし、もちろん、これは動作しませんが、str_replace()の2番目のパラメータは配列にすることはできませんので、これは私が試したものです。これを克服する方法は?

+1

それも有効なPHPではありませんので、それはまた、動作しません。それぞれの単語に対して 'str_replace()'を実行する配列をループすることをお勧めします。正規表現はより効率的ですが、あなたはこの段階で取り入れたいものではありません。 – miken32

答えて

3

最も基本的なアプローチは、チェックの単語の上にforeach loopを次のようになります。これは、単純な文字列検索を行うこと

$string = 'This is a brovn fox wit legs.'; 
$misspelledOnes = array('wit', 'brovn'); 

foreach ($misspelledOnes as $check) { 
    $string = str_replace($check, "<span style='color:red'>$check</span>", $string); 
} 
echo "<p>$string</p>"; 

注意。たとえば、「with」と正しく綴られていれば、それはまだこれで捕らえられます。あなたはもう少しPHPに慣れたら、この問題を回避することができますregular expressionsを使って何かを見ることができる:

$string = 'This is a brovn fox wit legs.'; 
$misspelledOnes = array('wit', 'brovn'); 
$check = implode("|", $misspelledOnes); 
$string = preg_replace("/\b($check)\b/", "<span style='color:red'>$1</span>", $string); 
echo "<p>$string</p>"; 
+0

OK、あなたの最初の提案は、1つの単語( 'ウィット')の文字列を赤色で返します。一致する配列のすべての値が色付けされている必要があります。つまり、 'brovn' /文字列。 – Mkey

+0

いいえ、それはうまく動作し、ちょうどそれを自分で走った。 – miken32

+1

ああ、今それを正しく調整 - 私の悪い。あなたのソリューションは本当に機能します!ありがとう! – Mkey

関連する問題