• ベストアンサー

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>

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

  • ベストアンサー
  • 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