お世話になっております。
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;
最後の「暖かい」しかハイライト表示されないのは、恐らく上書きされるから最後の単語のみハイライト表示になるのでしょうが、上書きされないよう何度も見直しているのですが、どれも解決までに至りません。お恥ずかしい・・。
以上、お忙しい中恐縮ですが、アドバイスのほど頂戴出来れば幸いです。よろしくお願い申し上げます。
No.1ベストアンサー
- 回答日時:
> $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(以下略 とするとかです。
kmeeさま
こんばんは。早速のアドバイスをありがとうございます。
>forの前に $string=$text;
まったく仰る通りですね。詳しい説明までして頂き恐縮いたします。
ご丁寧なアドバイスをありがとうございました!
No.3
- 回答日時:
#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;
?>
bm_hiro様
こんばんは。早速のアドバイスをありがとう御座います。
しかも2つももソースを提示して頂き恐縮です。
for文よりforeachの方が良いとよく耳にします。勉強になります。
有難うございました。
No.2
- 回答日時:
状況としては#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;
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) 条件付き書式の設定方法を教えて下さい。 2 2023/04/14 18:12
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで入力フォームでデータを確...
-
foreachがうまく動かない
-
ファイル名を変更してアップロ...
-
$a = ( $b == $c ) ? $d、 この...
-
XMLをツリー形式で表示
-
if文のなかで
-
フォームでのリセットを使う方法
-
PHPでURLにジャンプするには?
-
POSTデータのNAME属性をVALUEに...
-
ラジオボタンを押すと、表示が...
-
PHPでCookieを使った訪問回数に...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPでユーザー情報を入力して簡...
-
セッションを使わずに遷移先画...
-
エラーを元の画面に表示させるには
-
チェックボックスの必須項目指定
-
チェックボックスがチェックさ...
-
PHP・MYSQLで複数のチェックボ...
-
JavaScript変数をPHPへ渡す
-
配列をhiddenで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
PHPで入力フォームでデータを確...
-
Flaskでサーバー立ち上げに関して
-
phpで変数を使ってcopyできない
-
ファイル名を変更してアップロ...
-
PHPからHTMLへの変数の受け...
-
$_SESSIONに渡した後はそのまま...
-
テキストボックスの値を取得したい
-
openCVのトラックバーについて
-
scanfでの読み込み文字数制限
-
アップロードファイル名の文字化け
-
PHP MySql 画像を取得
-
Fortranでのファイル名操作につ...
-
ポインタ配列をfscanfで読み込...
-
UPDATEできない
-
WordのIDataObject::GetData呼...
-
C# 同じ処理をまとめたい
-
POSTの項目に追加
-
イタリア人がCatherineと聞いた...
おすすめ情報