PHPファイルから文字列を検索し、スペースで区切る方法

このQ&Aのポイント
  • PHPプログラム初心者の方向けに、テキストファイルから文字列を検索し、スペースで区切る方法について解説します。
  • テキストファイル内の文字列と数字の組み合わせをスペースで分割し、特定の文字列を検索する方法を学びます。
  • さまざまな文字列を検索して、該当する文字列と数字の組み合わせを取得し、合計値を計算する方法について説明します。
回答を見る
  • ベストアンサー

PHP ファイルから文字列を検索し、スペースで区切

こんにちは。PHPプログラム初心者です。 今回、実装したいのは、テキストファイルを読み込みます。 ----------------------- 優れる:すぐれる 1 良い:よい 0.999995 喜ぶ:よろこぶ 0.999979 褒める:ほめる 0.999979 ・・・ ------------------------ といった内容のテキストファイルです。文字と数字の間には半角スペースがあります。 そして、入力した文字が「良い」であるとします。 その文字をテキストファイルの中にあるかどうか検索して、文字と数字をスペースで分割して、 0.999995を出力したいのです。 この作業を何回か繰り返し、最後に合計を出したいと思っています。 どうすればよいでしょうか。 よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.2

特にエラーが出ていないのであれば、テキストファイルの文字コードがプログラムの文字コードと同じか確認ですかね。 後半部分の所を以下のように変えてみて、テキストファイルから読み込んだ単語と$Keywordの値が一致しない理由を探しましょう。 以下のようにすると、テキストファイルから読み込んだ単語が順次出力されてきますので、まずは文字化けが無いかチェックして文字コードの確認。 後は区切り文字が間違っていて、単語をうまく展開できていないと言う事がないか確認ですね。 私の手元で確認した限りはちゃんと動きました。 $Keyword = '良い'; $Score = 0; foreach ($WordList as $Value) { foreach (explode(':', $Value['Word']) as $WordValue) { var_dump($WordValue); // ココを追加 if ($WordValue == $Keyword) { $Score += $Value['Score']; } } }

rieqop7
質問者

お礼

ありがとうございます! おそらく文字化けしてたんだと思います。 実行できました!ほんとうに感謝いたします。

その他の回答 (2)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3
rieqop7
質問者

お礼

すみませんでした。

  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.1

$WordList = array(); if (($Hdl = fopen('list.txt', 'r')) !== FALSE) { while (($LineData = fgets($Hdl)) !== FALSE) { $WordData = explode(' ', $LineData, 2); $WordList[] = array('Word' => $WordData[0], 'Score' => $WordData[1]); } fclose($Hdl); } $Keyword = '良い'; $Score = 0; foreach ($WordList as $Value) { foreach (explode(':', $Value['Word']) as $WordValue) { if ($WordValue == $Keyword) { $Score += $Value['Score']; } } } echo $Score;

rieqop7
質問者

お礼

ありがとうございます。参考になりました。

rieqop7
質問者

補足

早速の回答有り難うございます。 とても参考になります。 このプログラムのテキストファイル名を当てはめて実行したのですが、 スコアが0から変わりません。 どこが動いていないと考えられるでしょうか・・。

関連するQ&A

  • PHP ファイル読み取りについて。

    こんにちは。PHPプログラム初心者です。 ファイルから数字を読み取って計算するにはどういうプログラムにすればよいでしょうか。 やりたいのは、テキストファイルを読み込みます。 そのテキストファイルの中には、 --------- 文字 123 あいう 456 もじ 7890 ・・・ --------- といった感じで、文字と数字が並んで入力されています。 文字の中にスペースはなく、文字と数字の間にはスペースがあります。 ここで、ユーザの入力に対して、 「もじ」があればファイルの「もじ」のすぐ隣の「7890」を出力するようにしたいのです。 これを繰り返し、最終的には、出力した数字を合計する作業をしたいです。 説明不足でわかりにくいかもしれませんが、 ヒントだけでも結構ですので、なにかありましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPプログラム ファイルから数字を抽出

    こんにちは。PHPプログラム初心者です。 今回、Twitterのツイートを取得して、その文章の単語ごとにネガティブかポジティブかを値をつけてくれている辞書を利用して、ツイートのネガポジを測ろうと思っています。 ここでお聞きしたいのが、入力文字に対して、テキストファイルの文字が一致すればその文字の横にある数字を出力して、文章の単語すべて足しあわせて、文章全体の数値を出したいのです。 テキストファイルの内容は -------------------------- 優れる すぐれる 1 良い よい 0.999995 喜ぶ よろこぶ 0.999979 褒める ほめる 0.999979 めでたい めでたい 0.999645 ・・・ --------------------------- といった感じで、-1~1の値が単語ごとに割り振られていて、 数字と単語の間には半角スペースが2つあります。 このテキストファイルを読み込んで、 入力文字(単語ごとに分けられています)に対して、 テキストファイルを検索して「すぐれる」があればその右の1を出力して、 それを繰り返して足しあわせて、文章全体での数値を出して、 全体で負の数字が出ればネガティブ!みたいなことをしたいです。 説明が下手ですみません。 わかりにくい表現があれば追記いたします。 すこしでもヒントがありましたらどんどん回答くだされば嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • ファイルからの文字列を検索

    テキストファイルを読み込み、任意の文字列を探すプログラムを作成しました。 これを改良し、ワイルドカード入力をした場合、*をa~zとA~Zに変えて、それぞれで検索しようとしています。ワイルドカードにはいる文字は1文字です。 「a*」と検索すれば「aa」、「ab」~「az」、「aA」、「aB」~「aZ」と検索し、合致したものを出力したいのです。 回答が欲しいとは思いますが、ヒントや考え方など何でも結構ですので、お力添えをお願いいたします。

  • テキストファイル中のカタカナ文字をスペースに変換

    エクセル(VBA)で テキストファイル(.txt)中の半角カタカナ文字を半角スペース文字に置き換えたいのですが ネットで検索しても同じ項目が探しきれませんでした。 どのようなコードが考えられますか ? Office 2019

  • (VBA) 複数スペースで文字列を分割する

    文字列中の文字を 複数の半角スペースで分割するコードを教えて下さい。   (半角スペースの数は、2個以上一定ではありません。) 但し、文字列中には複数スペース群が複数回ある場合がありますが  分割は、最初の複数スペース群とします。 例えば、 「SetOne_Vol xn xo サンプル」 の場合は、 「SetOne_Vol」と「xn xo サンプル」に分割 (分割した最初のスペース群の次にあるスペース群は何も変更なく   同数のスペースを書き出します。) 但しセミコロン「;」やコロン「:」で始まる 文字列は対象外でそのまま分割せずに書き出します。 添付画像を参照ください。   A: 元の文字列 B: 分割文字列(左側) C: 分割文字列(右側) ---------------------------------- Office_2019 / Windows10

  • Illustratorにてアウトライン化されていないスペース文字の見つけ方。

    表題の通りなのですが、半角や全角のスペースしか入力されていない文字データを上手く見つける方法を知っておられる方がおりましたら、 お教え願います。 預かったデータに、酷い時は一つのファイルに100個程のスペース文字データが入っている事があってゴミ取り作業だけで時間が無くなります。 何か良い削除方法はありませんでしょうか?

  • セル内の文字をスペースによって分割するには?

    教えてください。 a1 に DX-09 1 SD-4 2 HPE-25 3 と、全角半角入り混じってスペースで区切られた文字が入っています。 これを、B1,C1,D1,E1,F1,G1にそれぞれDX-09,1,SD-4,2,HPE-25,3 と分割させたいです。 必ず半角スペースで区切られていますが、それぞれの文字の長さはマチマチです。 また、全角数字のも文字の長さは不定形です。 excel2010を使用しています。 お知恵を貸してください。

  • 同文字列の削除方法

    vb6でプログラムを書いているのですが,同文字列がある場合削除し出力するプログラムの書き方がわかりません・・・. 例えば,se a sa a se aa →se a sa aa という様に出力したいです.(一つ一つの文字列の後には入力・出力共に半角スペースがあります.) 宜しくお願いします.

  • phpについて。文字列の長さを指定する方法

    test1.php で、 コード:[textbox] という項目を表示します。 textboxに打ち込んでほしいことは、必ず半角英数字6文字です。 ここの値をpostで飛ばす?あまり良くわからないのですが、 入力した後 test2.php にジャンプさせます。 もし、[textbox」内が半角英数字6文字でなければ、 ジャンプボタンを押したときに、 「コードは半角英数字6文字で入力してください」 というような表示をしたいのですが、できますでしょうか?? どなたか教えてください!!

    • ベストアンサー
    • PHP
  • 複数ワード検索(PHP)の区切り文字について

    PHP初心者です。 データベースの検索処理を実装しようとしています。 一般の検索エンジンのように、半角スペース、全角スペース、どちらも区切り文字として認識させて、スペースで区切った複数ワードによる検索抽出ができるようにしたいのです。 データベース例) 青山病院 伊藤病院 井上病院 青山歯科 鈴木歯科 「青山 井上」(全角スペース)と検索しても、「青山 井上」(半角スペース)と検索しても、 青山病院 井上病院 青山歯科 という検索結果にしたい。 実際にコードをかいてみたのが以下です。 $searchwords = "青山 井上"; //全角スペース $array_searchwords = mb_split("[  ]", $searchwords); ////[  ]には全角スペース $sql = "SELECT hospitalname FROM hospital"; foreach( $es_array_searchword as $k => $v ) { # 1ワード毎のカッコ区切り(開始)  if( $k == 0 ) {   $sql .= " WHERE (";  } else {   $sql .= " OR (";  }  $sql .= " hospitalname LIKE '%${v}%'";  $sql .= " ) ";  echo $sql; } このようにかくと、$sqlは、 「SELECT hospitalname FROM hospital WHERE ( hospitalname LIKE '%青山%' ) OR ( hospitalname LIKE '%%' ) OR ( hospitalname LIKE '%井上%' )」 と出力されます。 要するに、$searchwords = "青山 井上";、の「全角スペース」が文字として認識されてしまいます。 これを、 「SELECT hospitalname FROM hospital WHERE ( hospitalname LIKE '%青山%' ) OR ( hospitalname LIKE '%井上%' )」 というsql文で実行できるようにしたいのです。 $array_searchwords = mb_split("[  ]", $searchwords); の[  ]の書き方が問題になるのかなと思いますが、全角スペース区切りを生かすには、どうかけばよろしいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう