- ベストアンサー
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>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
foreach($data as $tango) $count[tango]++; と同じ処理をする関数に $count = array_count_values($data); があります 英文字だけの単語なら $data = str_word_count($str, 1); という関数もあります。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
大文字小文字を別カウントするといけないので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)
> 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."; のピリオドの後に、半角スペースを入れたほうが良いと思います。