1

PHP / CSSは文字列内の単語を検索し、表示する色を変更します。問題があり、その解決策が見つかりません、何か提案はありますか?ありがとう。

      <pre>

      <?php 
      $str="Try to realize the truth... there is no spoon."; // spoon can be anywhere in string
      $array = explode(" ", $str);
for($i=0;$i < count($array);$i++)
     {
       if ($array[$i] == "spoon") {
             ?><span style="color:red;"><?php echo echo $array[$i]." "; ?></span>
             <?php
           } else {
              echo $array[$i]." ";
           }   
     } ?>

      </pre
4

4 に答える 4

5

私は個人的に使用します:

function highlight($text='', $word='')
{
  if(strlen($text) > 0 && strlen($word) > 0)
  {
    return (str_ireplace($word, "<span class='hilight'>{$word}</span>", $text));
  }
   return ($text);
}

$str="Try to realize the truth... there is no spoon."; // spoon can be anywhere in string
$str= highlight($str, 'spoon');

注: str_ireplaceは、大文字と小文字を区別しないバージョンstr_replaceです。

また...明らかに、どこかで「hilight」のcssを定義する必要があります。

于 2012-08-07T13:33:25.447 に答える
4

あなたが探してpreg_replace()いる。

preg_replace('/\b(spoon)\b/i', '<span style="color:red;">$1</span>', $str);

DaveRandomからのメモ:

\bは、小さじ1杯またはスプーンマンと一致しないようにするための単語境界アサーションであり()、ケーシングが同じままになるように置換で使用するキャプチャグループです。

i最後に大文字と小文字を区別せず$1、一致した単語を置換文字列に戻します。

于 2012-08-07T13:31:06.530 に答える
1

コードが機能しない理由は、「」(スペース)を分解すると、「スプーン」という単語を含む配列を受け取ることを期待しているためですが、実際には「スプーン」という単語です。(ピリオドに注意してください)配列に追加される理由と、条件ステートメントif ($array[$i] == "spoon")がトリガーされない理由。

注: 私はほとんどの人に同意し、彼はstr_replaceやpreg_replaceのような代替手段を使用する必要があると信じていますが、これを「スクラッチ」から解決しようとすることについて何か言わなければならないと思います。

于 2012-08-07T13:32:32.593 に答える
1

スペースを爆発させて「スプーン」を見つけることができないので、「スプーン」を手に入れるだけです。

これは1行で実行できます。

str_replace("spoon", "<span style=\"color:red;\">spoon</span>", $str);

お役に立てれば。

于 2012-08-07T13:35:25.543 に答える