• ベストアンサー

PHPでの単語の出現回数表示

単語 回数  I   1 am 1 a 4 boy 2 . 4 This 1 is 3 pen 1 That 1 desk 1 He 1         ↑ ずれてしまいますが回数と同じ行です。 と上のように出したいのですが何をすればいいのかがわかりません参考書等を見てforeachを使うことがわかったのですが使い方がいまいちよくわかりませんどうかお願いします! 自分なりにやってみたのが下です <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <?php $str ="I am a boy.This is a pen.That is a desk.He is a boy."; $data = split(" ",$str); foreach($data as $tango) $count[tango]++; foreach($count as $tango => $value){ print "<tr><td align='center'>$tango</td>"; print "<td align='right'>$value</td></tr>"; ?> </BODY> </HTML>

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

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

foreach($data as $tango) $count[tango]++; と同じ処理をする関数に $count = array_count_values($data); があります 英文字だけの単語なら $data = str_word_count($str, 1); という関数もあります。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

大文字小文字を別カウントするといけないのでstrtolower()しておきました。 splitで区切るのはやや無理があるとおもいます。 英数以外の記号をどうするかよく考えておいたほうがよいでしょう。 たとえばアポストロフィーは単語の一部でピリオドなどは1語として カウントすると以下のようになります。 <?php $str ="I am a boy.This is a pen.That is a desk.He is a boy.A boy isn't a girl!?"; preg_match_all("/[A-Za-z0-9']+|[.,!?]/",$str,$match); foreach($match[0] as $tango){ $count[strtolower($tango)]++; } print "<table border>"; foreach($count as $tango => $value){ print "<tr><td align='center'>{$tango}</td>"; print "<td align='right'>{$value}</td></tr>"; } print "</table>"; ?>

  • TA-HT81S
  • ベストアンサー率39% (72/184)
回答No.1

> foreach($count as $tango => $value){ > print "<tr><td align='center'>$tango</td>"; > print "<td align='right'>$value</td></tr>"; > ?> 閉じ括弧がありませんね。 また、区切り文字を半角スペースにされてますから、 > $str ="I am a boy.This is a pen.That is a desk.He is a boy."; のピリオドの後に、半角スペースを入れたほうが良いと思います。

関連するQ&A

  • phpで名簿データを出力

    名簿データを開き、一枠に番号・名前・住所・電話・メールを書き出し一列に4名分のデータを並べます。 CGIだと以下の様なイメージかと思いますが、今回はPHPで書くように指示されました。 勉強不足で月曜迄に出来る気がしません。どのように書けば良いかご教示よろしくお願いします。 open (IN,"meibo.txt"); @abc = <IN>; close (IN); print = "<table border=1><tr>\n"; foreach (@abc) {($id,$name,$address,$tel,$mail) = split(/<>/); print <<HTML; <td>$id<br>$name<br>$address<br>$tel<br>$mail</td> HTML $count++; if ($count > 4){print = "</tr><tr>\n"; $count = 0;} } print = "</tr></table>\n";

    • ベストアンサー
    • PHP
  • CSVファイルを読み込んで表示するPHP

    <?php setlocale(LC_ALL, 'ja_JP'); if( $handle = fopen( 'data.csv', 'r' ) ){ echo '<table border=1 cellspacing=0 bordercolor=#ff6600 align=center>'; if( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr style="background-color:#FFCCFF">'; for( $i = 0; $i < count( $data ); $i ++ ){ if($i===0){ echo '<td align=center width=160px>' . $data[$i] . '</td>'; }else{ echo '<td align=center width=60px>' . $data[$i] . '</td>'; } } echo '</tr>'; } while( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr>'; for( $i = 0; $i < count( $data ); $i ++ ){ echo '<td align=center>' . $data[$i] . '</td>'; } echo '</tr>'; } echo '</table>'; } fclose($handle); ?> ■data.csvの内容 品名,数量,予備 AAA,1,1 BBB,1,1 CCC,1,1 上記のPHPは2列まで表示されるようになっています。 それを3列まで表示できるようにしたいのですが、 初心者なので、どう記述したらいいのか分かりません。 どうか、ご教授お願いします。

    • ベストアンサー
    • PHP
  • 表示されません

    $pc = $form->param("pc"); $size1 = $form->param("size1"); $size2 = $form->param("size2"); で、数字をとりこんで <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0 WIDTH=460> <TR><TD BGCOLOR=\"#DDDDCC\" ALIGN=\"center\"> <FONT SIZE=2>パソ\コン </FONT></TD> <TD BGCOLOR=\"#DDDDDD\"><TT>合計台数:</TT>$pc 台 </TD></TR> <TR><TD BGCOLOR=\"#DDDDCC\" ALIGN=\"center\"> <FONT SIZE=2>ホームページ容量</FONT></TD> <TD BGCOLOR=\"#DDDDDD\"><TT>合計容量:</TT>$size1MB </TD></TR> <TR><TD BGCOLOR=\"#DDDDCC\" ALIGN=\"center\"> <FONT SIZE=2>メール容量 </FONT></TD> <TD BGCOLOR=\"#DDDDDD\"><TT>合計容量:</TT>$size2MB </TD></TR> で表示させるだけなのですが、pcは表示されても、sizeが両方とも表示されません 何故でしょうか?

    • ベストアンサー
    • CGI
  • 質問:PHP&mysqlで、選択したcheckboxを次画面で表示させたい

    (1)DB内を検索 (2)DBアクセスし、検索結果を画面(1)で表示。(ループです)その際、checkboxを左につける。 (3)チェックされたレコードを画面(2)で再表示。 (2)の画面でレコード取得&checkbox <table class="TEBLE" border="1" width="100%"> <tr><th align="left"> </th> <th align="left">upload日</th> <th align="left">ファイル種別</th> <th align="left">ファイル名</th> <th align="left">作成日時</th> <th align="left">サイズ</th> </tr> <? while($rows = mysql_fetch_assoc($result)): ?> <tr> <td><input type="checkbox" name="ck_del[]"VALUE="<?= $rows ?>"></td> <td><?= $rows[upload_YMD] ?></td> <td><?= $rows[upload_FILE_TYPE] ?></td> ・・・・・・・・ <? endwhile; ?> これで検索結果は表示できました。でもvalueの値が間違っているようなきがしますが...全部の値をcheckboxでもって行こうという考えが無理ですか??? 受け取る画面 <?php $ck_del = $_POST["ck_del"]; foreach($ck_del as $rows){ ?> <tr><td><?= $rows[upload_YMD] ?></td> <td><?= $rows[upload_FILE_TYPE] ?></td> ・・・ </tr> <? }; ?> こんな感じで書いたんですが表にはAという英文字しか 表示されなくて困っています。どなたかおわかりの方がいらっしゃるならご教授お願いします。 またもっといい書き方がありましたら教えてほしいです。

    • 締切済み
    • PHP
  • smartでのtable表示について

    ちょっとベタな書き方ですが下記のように、画像と名前のセットを表示して行く時に、 最後、余ったセルに{html_table}などを使って自動的に埋めて行く事は、出来ますでしょうか、 <table width="650" border="0" cellspacing="0" cellpadding="0"> {foreach from=$data item=data key=key name="loop"} {if $smarty.foreach.loop.iteration %5 ==1}<tr>{/if} <td> <table width="125" border="0" cellspacing="0" cellpadding="1"> <tr> <td><a href="{$data.id}.php"><img src="img/{$data.staff_file}" width="125" height="175" border="0"></a> </td></tr> <tr> <td>{$data.name} </td> </td></tr> </table> </td> {if $smarty.foreach.loop.iteration % 5 ==0}</tr>{/if} {/foreach} {if $smarty.foreach.loop.total % 5 ==4}<td> </td>{/if} {if $smarty.foreach.loop.total % 5 ==3}<td> </td><td> </td>{/if} {if $smarty.foreach.loop.total % 5 ==2}<td> </td><td> </td><td> </td>{/if} {if $smarty.foreach.loop.total % 5 ==1}<td> </td><td> </td><td> </td><td> </td>{/if} </table>

    • ベストアンサー
    • PHP
  • テーブルの表示位置の変更は

    下記のHTMLを記述したのですが、表示位置が左によって表示されます。 中心に表示するには、どうしたらよいのですか。 <table border="0" cellspacing="0" cellpadding="5"> <tr><td align="center">総数</td> <td align="right"><img src="/cgi-bin/counter/cmfcount2.cgi?all=a"></td></tr> <tr><td>今日</td> <td align="right"><img src="/cgi-bin/counter/cmfcount2.cgi?day=a"></td></tr> <tr><td>昨日</td> <td align="right"><img src="/cgi-bin/counter/cmfcount2.cgi?yes=a"></td></tr> </table><br>

    • ベストアンサー
    • HTML
  • 選択したテーブルのセルの背景色を変更させる方法

    こんばんは。 現在クイズをcgiで作っており(20問程度)、自分が選択した答えの背景を変化させたいと考えております。 問題はテーブル内に収めています。 ↓はcgi内で作成している部分のテーブルサンプルです <form action="./test.cgi" method="post"> <table width="520" border="1" cellpadding="5" cellspacing="0" class="check" align="right"> <tr> <td width="420" align="center"><b>$title</b></td> <td width="100" colspan="2" align="center"><b>回答欄</b></td> </tr> <tr> <td width="420">1.$q3</td> <td width="50"><input type="radio" name="3" value="1">$a31</td> <td width="50"><input type="radio" name="3" value="2">$a32</td> </tr> <tr> <td width="420">2.$q4</td> <td width="50"><input type="radio" name="4" value="1">$a41</td> <td width="50"><input type="radio" name="4" value="2">$a42</td> </tr> <tr> <td width="420">3.$q5</td> <td width="50"><input type="radio" name="5" value="1">$a51</td> <td width="50"><input type="radio" name="5" value="2">$a52</td> </tr> <tr> <td width="10"></td> <td width="540" align="center"> <input type="hidden" name="action" value="result"> <input type="image" src=".././img/diagnose.gif" border="0"> </td> </tr> </table> </form> Java Scriptでテーブルのセルにidをふればできると聞き、初心者ながら色々試してみたものの、なかなかうまくいきません。 どなたかご教授お願いいたします。

  • PHP 文字の出現回数2

    前回↓ http://oshiete1.goo.ne.jp/qa29 で回答をいただいて、問題は解決したのですがまた新たに わからないことがあるので質問させてください。 作っているプログラムは ユーザーがtextareaからインプットした文章(英語)を PHPプログラムが読み取り 出現数を数えるというものです。 ここまでは前回の質問で解決したのですが、 その後 インプットした文章から 特に文章の内容に関係ないと思われる単語(例えば、I,am,you,are,and,orなど)を除外したいのです。 そこから、出現回数を数え、一番多い出現数の単語をoutputしてユーザーに返し… とプログラムがさらに続くのですが 「特定の単語の除外」で困っています。 プログラムは今、以下のような状態です。 $story = _Post["story"];     //get the story from HTML doc preg_match_all("/([a-zA-Z']+)/",$story,$match); //Get the words foreach($match[0] as $val){ $count[$val]++; // strtolower } このプログラムの途中で、特定の単語(I、you、amなど)を削除したいのです。2行目で作った配列matchから特定の単語をうまく除外するよい方法はないでしょうか? explode、split等ではうまくいきませんでした。 アドバイスをいただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでURLのソースの中から数字の文字列を検索したいのですが

    PHPでURLのソースの中から数字の文字列を検索したいのですが <?php $str = 85%80%78%77%70%60%; $pattern="/[0-9]+(?=%)/u"; mb_internal_encoding("UTF-8"); preg_match_all($pattern,$str,$matches); foreach((array) $matches[0] as $val) { print mb_convert_kana($val,"a")."<br>\n"; //半角にして表示 } ?> この記述で、文字列から80%のような 全角文字で%の前の文字だけを抜き出せました。 そこでURLからデーターを抜き出すべく ////////ソース////// <table> <TR> <TD>あ</TD> <TD><B>88%</B>/TD> </TR> <TR> <TD>す</TD> <TD><B>85%</B>/TD> </TR> ........... </table> 下記のように記述しましたが <?php $html_data = file_get_contents("http://www.1234.com/1234.html"); if (preg_match("/<table\s.*>([\s\S]*)<\/table>/i",$contents,$matches)){ $contents = $matches[1]; } $str = $html_data; $pattern="/[0-9]+(?=%)/u"; mb_internal_encoding("UTF-8"); preg_match_all($pattern,$str,$matches); foreach((array) $matches[0] as $val) { print mb_convert_kana($val,"a")."<br>\n"; //半角にして表示 } ?> しかし、動作しません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ラジオボタンでテーブルの背景色を変える

    いつもお世話になっています。 テーブルで数十行同じ項目を表示させるとき、今何行目を見ているかわかりやすいように 目印をつけたいと思っています。 ラジオボタンを配置したのですが、一行が横に長く、区別しにくいため 加えて選択されたラジオボタンと同じ行の背景色を変えようと思いました。 が、こういうことってできるのでしょうか? ラジオボタン選択でウィンドウの色を変える方法の応用かなと思って 色々試しましたが全て失敗でした(涙)。 どなたかご存知の方、教えてください。 ちなみにテーブルのイメージは大体こんな感じです↓ <p align=center> <TABLE frame=below rules=all WIDTH=98% vspace=100> <tr> <td width=7% align=right><input type="radio" name="count" value="1"></td> <td align=right width=8%>1234567</td> <td align=left width=18%>12345678901234567890</td> <td align=right width=8%>12</td> <td align=right width=8%>150</td> <td align=right width=8%>300</td> </tr> <tr> <td width=7% align=right><input type="radio" name="count" value="2"></td> <td align=right width=8%>1234567</td> <td align=left width=18%>12345678901234567890</td> <td align=right width=8%>12</td> <td align=right width=8%>150</td> <td align=right width=8%>300</td> </tr> <tr> <td width=7% align=right><input type="radio" name="count" value="3"></td> <td align=right width=8%>1234567</td> <td align=left width=18%>12345678901234567890</td> <td align=right width=8%>12</td> <td align=right width=8%>150</td> <td align=right width=8%>300</td> </tr> </table>

専門家に質問してみよう