アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。
textという変数に多くの文字列が格納されており、これを表示させる際、別ファイルであるkey.txtに登録されている単語を特定文字をハイライト表示させたいと考えています。

key.txtには、ハイライト表示させたい単語が以下のように1行ずつ登録されている。

宜しく
寒い
天気
暖かい

$text = "こんばんは。はじめまして。宜しく。ここ最近随分と暖かい気がします。";

と、これを表示させる際、別ファイルであるkey.txtを参照し、該当すr単語があった場合は、その単語をハイライト表示させたい。

そこで、現在以下のようなスクリプトを組んでみましたが、key.txtの最後の単語である、「暖かい」のみしかハイライト表示いたしません。

$file_name = "./key.txt";
if(file_exists($file_name)){
$f_data = file($file_name);
$f_cnt= count($f_data);

for($h=0; $h<$f_cnt; $h++){
$check_key = preg_replace("/\n|\r/", "", trim($f_data[$h]));
$string = str_ireplace( $check_key, "<span style=\"background:#ffff66; color:black; font-weight:bold\">".$check_key."</span>", $text);
}
}
echo $string;

最後の「暖かい」しかハイライト表示されないのは、恐らく上書きされるから最後の単語のみハイライト表示になるのでしょうが、上書きされないよう何度も見直しているのですが、どれも解決までに至りません。お恥ずかしい・・。

以上、お忙しい中恐縮ですが、アドバイスのほど頂戴出来れば幸いです。よろしくお願い申し上げます。

A 回答 (3件)

> $string = str_ireplace( $check_key, "<span style=\"background:#ffff66; color:black; font-weight:bold\">".$check_key."</span>", $text);


ここが毎回、その前に変換した$stringを破棄して、元の$textからの置換をするようになっています。
そのため、最後に行った置換だけが$stringに入ります。
ここを、前に置換したものに対して次の置換を行うようにしないとです。

forの前に $string=$text; として、$string = str_ireplace( 略, $string);とするとか
$textが変ってしまってもよいのなら $text = str_ireplace(以下略 とするとかです。
    • good
    • 0
この回答へのお礼

kmeeさま

こんばんは。早速のアドバイスをありがとうございます。

>forの前に $string=$text;

まったく仰る通りですね。詳しい説明までして頂き恐縮いたします。
ご丁寧なアドバイスをありがとうございました!

お礼日時:2010/01/31 02:42

#2です。



ついでなので、もう一つ 別の書き方をしてみました。

<?
$text = "こんばんは。はじめまして。宜しく。ここ最近随分と暖かい気がします。";

$file_name = "./key.txt";
if(file_exists($file_name)){
$f_data = file($file_name);
$check_keys = array();

foreach($f_data as $i => $dat) {
$dat = trim($dat);
$check_keys[$dat] = "<span style=\"background:#ffff66; color:black; font-weight:bold\">".$dat."</span>";
}

$string = strtr($text , $check_keys);
}
echo $string;
?>
    • good
    • 0
この回答へのお礼

bm_hiro様

こんばんは。早速のアドバイスをありがとう御座います。
しかも2つももソースを提示して頂き恐縮です。
for文よりforeachの方が良いとよく耳にします。勉強になります。
有難うございました。

お礼日時:2010/01/31 02:45

状況としては#1さんの言っている通りです。



俺なら こう書くかな~ってだけですので、聞き流しでお願いします。

<?
$text = "こんばんは。はじめまして。宜しく。ここ最近随分と暖かい気がします。";

$file_name = "./key.txt";
if(file_exists($file_name)){
$f_data = file($file_name);

foreach($f_data as $i => $dat) {
$check_key = trim($dat);
$text = str_ireplace( $check_key, "<span style=\"background:#ffff66; color:black; font-weight:bold\">".$check_key."</span>", $text);
}
}
echo $text;
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!