PHPを使った得点順位の計算方法と表示方法

このQ&Aのポイント
  • PHPを使った得点順位の計算方法と表示方法を説明します。
  • 比較しながら順位を付けるために、「1」から始めて「<=」演算子を使用します。
  • 個人の得点と合計点、平均点を表示するために、配列を使用し、foreachループを使います。
回答を見る
  • ベストアンサー

少し初歩的な質問です。

比較しながら順位を付けていくためには、最初に「1」いれといて、「<=」大きければ順位をかえる・・・ ここまで書いて誤っていたことに気がつきました。改めて、最高得点をしる方法と比較して順位をだす関数ありますでしょうか? #.1f(初歩的すぎてすみません)下は頭の中です、合計点の出し方は積み重なっていくというところまでわかっています。順位の出し方も比較しながら数字を入れ替えればいいのかなと思っています。 <?php // 氏名をキーとする。 $tests = array( //点数 "鈴木" => array(92,1), "佐藤" => array(74,1), "中村" => array(42,1), "三浦" => array(65,1) ); $kamokusu = count($tests["鈴木"]); // 科目数 ?> <table border="2"> <tr> <th>名前</th> <th>点数</th> <th>順位</th> </tr> <?php // 個人の得点、合計点、平均点の行を表示 foreach ( $tests as $name => $test ) { echo "<tr>"; echo "<td>" . $name . "</td>"; // 個人名の表示 $total = 0; // 合計点初期化 // 個人の教科別の得点表示と合計点集計を行う foreach ( $test as $tensu ) { echo "<td>" . $tensu . "</td>"; // 得点表示 $total += $tensu; // 合計点集計 } } ?> </table>

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

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

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

<?php $tests = array( //点数 "鈴木" => array(92,1), "佐藤" => array(74,1), "中村" => array(42,1), "三浦" => array(65,1) ); $result = array(); foreach ($tests as $name => $test) { $result[$name] = array_sum($test); } arsort($result); ?> <table border="2"> <tr> <th>名前</th> <th>合計点数</th> <th>科目1点数</th> <th>科目2点数</th> <th>順位</th> </tr> <?php $rank = 1; foreach($result as $name => $tensu) { ?> <tr> <td><?php echo $name; ?></td> <td><?php echo $tensu; ?></td> <td><?php echo $tests[$name][0]; ?></td> <td><?php echo $tests[$name][1]; ?></td> <td><?php echo $rank; ?></td> <?php $rank++; } ?>

sAtosif
質問者

お礼

何回か質問してますが、質問者の糸を読み取って、答えを返されているのが、回答以上に感動しました。

関連するQ&A

  • テーブルデータ表示

    mysqlからデータをphpで取得し以下のような多次元配列になっています。 Array ( [0] => Array ( [id] => 116 [name] => あああ ) [1] => Array ( [id] => 58 [name] => いいい ) [2] => Array ( [id] => 89 [name] => ううう ) ) 単純にデータを表示させたく以下のようにしましたが<th>$key2</th>の箇所が上記配列の場合 2回繰り返されて表示されてしまいます。ここはフィールド名なので1回の表示でいいのですが どのように記述すれば思うような表示になるでしょうか? echo "<table border=\"1\">"; echo "<tr>"; foreach ($tmp1 as $key => $val) { foreach ($val as $key2 => $val2) { echo "<th>" . $key2 . "</th>"; //フィールド名 } } echo "</tr>"; foreach ($tmp1 as $key => $val) { echo "<tr>"; foreach ($val as $key2 => $val2) { echo "<td>" . $val2 . "</td>"; // 取得したデータをある分だけ繰り返し } echo "</tr>"; } echo "</table>";

    • ベストアンサー
    • PHP
  • 連想配列から<th>を含むテーブルを作成する関数

    連想配列からテーブル(<th>テーブルヘッダ項目を含む)を作成する関数を作ろうと思っています。 配列と関数をどのように書けばHTMLのソースのようになるでしょうか? 値によって、<td>と<th>を振り分けるようになど良い方法を教えてください。 (1.できれば配列で<td> </td>は省略したいと思います。) (2.<th> </th>の指定場所は下のhtmlのように縦とか横とかにに変えられた方が良いです。) //----- 関数 ----- function table($v) { } //----- 配列 ----- $s = array(); $s[0] = array( 'A-1' , 'B-1' , 'C-1' , 'D-1' , 'E-1' ); $s[1] = array( 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' ); $s[2] = array( 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' ); $s[3] = array( 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' ); $s[4] = array( 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' ); table($s); //----- 生成されるhtml ----- <table> <tr><th>A-1</th><th>B-1</th><th>C-1</th><th>D-1</th><th>E-1</th></tr> <tr><td>A-2</td><td>B-2</td><td>C-2</td><td>D-2</td><td>E-2</td></tr> <tr><td>A-3</td><td>B-3</td><td>C-3</td><td>D-3</td><td>E-3</td></tr> <tr><td>A-4</td><td>B-4</td><td>C-4</td><td>D-4</td><td>E-4</td></tr> <tr><td>A-5</td><td>B-5</td><td>C-5</td><td>D-5</td><td>E-5</td></tr> </table> <table> <tr><th>A-1</th><td>B-1</td><td>C-1</td><td>D-1</td><td>E-1</td></tr> <tr><th>A-2</th><td>B-2</td><td>C-2</td><td>D-2</td><td>E-2</td></tr> <tr><th>A-3</th><td>B-3</td><td>C-3</td><td>D-3</td><td>E-3</td></tr> <tr><th>A-4</th><td>B-4</td><td>C-4</td><td>D-4</td><td>E-4</td></tr> <tr><th>A-5</th><td>B-5</td><td>C-5</td><td>D-5</td><td>E-5</td></tr> </table> //----- 考え中??の配列 ----- $s = array(); $s[0] = array( '<th>A-1</th>' , '<th>B-1</th>' , '<th>C-1</th>' , '<th>D-1</th>' , '<th>E-1</th>' ); $s[1] = array( 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' ); $s[2] = array( 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' ); $s[3] = array( 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' ); $s[4] = array( 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' ); table($s); $s = array(); $s[0] = array( 'th' => 'A-1' , 'B-1' , 'C-1' , 'D-1' , 'E-1' ); $s[1] = array( 'th' => 'A-2' , 'B-2' , 'C-2' , 'D-2' , 'E-2' ); $s[2] = array( 'th' => 'A-3' , 'B-3' , 'C-3' , 'D-3' , 'E-3' ); $s[3] = array( 'th' => 'A-4' , 'B-4' , 'C-4' , 'D-4' , 'E-4' ); $s[4] = array( 'th' => 'A-5' , 'B-5' , 'C-5' , 'D-5' , 'E-5' ); table($s); //----- 参考中のソース ----- //-- http://okwave.jp/qa/q8107250.html function table($v) { echo '<table>'; foreach ($v as $t1) { echo '<tr>'; foreach ($t1 as $t2) { echo '<td>' . $t2 . '</td>'; } echo '</tr>'; } echo '</table>'; }

    • ベストアンサー
    • PHP
  • 複数のレコードをimplodeでまとめる方法

    ほんと度々すいません…。 http://oshiete1.goo.ne.jp/qa3574682.htmlで一度解決したのですが、私の質問の仕方が悪く、結局実用できなかったので再度質問させてください。 上記URLでやったことに、更にフィールドが増えた場合の記述方法についてです。 table1 【ID|field1】 [1|AAA] [1|BBB] [2|CCC] [3|DDD] [3|EEE] [3|FFF] table2 【ID|field2】 [1|ooo] [2|ppp] [2|qqq] [2|rrr] [3|sss] [3|ttt] ↑構造が同じだけど内容が違うテーブルが5つあります(table1~table5まで)。そしてこれらのテーブルをクエリでは↓ <table> <tr><th>ID</th>   <th>field1</th>   <th>field2</th>   <th>field3</th>   <th>field4</th>   <th>field5</th></tr> <tr><td>1</td>   <td>AAA<br>BBB</td>   <td>ooo</td>   ・・・</tr> <tr><td>2</td>   <td>CCC</td>   <td>ppp<br>qqq<br>rrr</td>   ・・・</tr> <tr><td>3</td>   <td>DDD<br>EEE<br>FFF</td>   <td>sss<br>ttt</td>   ・・・</tr> </table> というように表示するのが理想です。 一応自分で考えましたが、できなかったので…お願いします。 ============================== 一応、前回http://oshiete1.goo.ne.jp/qa3574682.htmlにて頂いた回答をまとめたコードが↓です。 (table1のみの場合だとこうなります)→mr_araki様に感謝しております。 $query = mysql_query($sql); $rows = array(); while ($row = mysql_fetch_assoc($query)) {   if (!isset($rows[$row[ID]])) {      $rows[$row[ID]] = array();   }   $rows[$row[ID]][] = $row[field1]; } echo "<table>\n"; echo "<tr><th>ID</th><th>field1</th></tr>\n"; foreach ($rows as $id => $row) {   echo "<tr><td>" .$id. "</td><td>" .implode('<br>', $row). "</td></tr>\n"; } echo "</table>";

    • ベストアンサー
    • PHP
  • PHPの読解お願いいたします

    PHP初心者です。 環境 XAMPP1.7.0(最新) アパッチなど一括ダウンロード OS:ビスタ 多次元配列について以下のコードについて疑問があります。 ●の部分が疑問点となっております ~~~~~~~~~~~~~~~~~~~~~~~~~~~ <body> <table border="2"> <tr> <th>都市名</th><th>最高気温</th><th>最低気温</th> </tr> <?php $data=array( array("東京",32,25), array("名古屋",28,21), array("大阪",27,20), array("京都",26,19), array("福岡",27,22), ) foreach($data as $city){ print "<tr>"; ● foreach($city as $value) print "<td>{$value}</td>"; ●● } print "</tr>"; ?> </table> </body> </html> ~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・ここで<tr>を持ってくる必然性がわかりません。 例えば print "<td>{$value}</td>"のコードの<td>の横に付けることでも可能ではないのしょうか? ●●・・foreachがネストになり、多次元配列となっています。 まず$dataを取得しそれぞれを$cityに格納、次のforeachで$cityに格納された1行目のarray("東京",32,25)を一つづつ$valueに格納していくのだとは思いますが、例えばこのforeachネストの一連の流れを以下のように1つのforeachで記載することがなぜエラーになるのか分かりません。 foreac($data as $city){ print "<tr><td>{$city}</td></tr>" } $cityの中にはarray("東京",32,25) array("名古屋",28,21), array("大阪",27,20),array("京都",26,19),array("福岡",27,22), が格納されているので、別にこれをネストして{$value}に格納しなくてもそのまま変数$cityのみで表を作成できるのではないかと思っています。 まあでもエラーが出ますので、私の考えに大きな誤りがあるわけですが、誤っている部分をご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php文字化けについての質問

    <TABLE BORDER> 99表 <tr> <th> </th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th> </tr> <tr> <?php for ($i = 1; $i <= 9; $i++ ) { echo "<tr>\n"; echo '<th>'. $i ."</th>\n"; for ($j = 1; $j <= 9; $j++ ) echo '<td>'. $i * $j."</td>\n"; echo "</tr>\n"; } ?> </table> 表と言う文字が文字化けして???と表示されます phpの設定も何度も見直しているのですが 問題がが発見できません どなたかお教えください

    • ベストアンサー
    • PHP
  • 【PHP】smartyとPHPの記述違いとメリット

    smartyというのが、デザインとプログラムを分けれるというので 使ってみたのですが、 //--------------------smarty--------------------- <table border=1> <tr> <th>{$table.title}</th> </tr> {foreach item=result from=$data_list} <tr> <td>{$result[0]}</td> </tr> {/foreach} </table> と、smarty用の記述をHTML内にいろいろ書かなければならず //------------------php---------------------- <table border=1> <tr> <th><?=$table[title] ?></th> </tr> <?php foreach($data_list as $key => $value){ ?> <tr> <td><?= $value ?></td> </tr> <?php } ?> </table> とHTML内にPHPをいろいろ書くのと  あまり大差無い気がして どういう点がよいのがイマイチ分かりません。 smartyは 使う メリットは どういうものがあるのでしょうか。

    • ベストアンサー
    • PHP
  • No.を降順で表示するには

    // データファイルから1行ずつ配列として読み込み $data_all = file("../../db/csv/maillog.csv"); // データをHTML表示用に処理 for($i = 1 ; $i < count($data_all) ; $i++){ // 変数の開放 unset($a); // データを以下の配列として取得 // $data_array[0] - 求人NO // $data_array[1] - 公開日 // $data_array[2] - 求人の概要 // $data_array[3] - 業界 // $data_array[4] - 規模 // $data_array[5] - 上場区分 // $data_array[6] - 募集職種 $data_array = explode(",",$data_all[$i]); // データ表示フラグが成立している場合のHTML表示処理 echo "<TR>\n"; echo "<FORM method=\"post\" action=\"./mail.html\">\n"; echo "<TD nowrap><INPUT type=\"submit\" value=\" 詳細\"></TD>\n"; echo "<TD nowrap>" . $data_array[0] . "</TD>\n"; echo "<TD nowrap>" . $data_array[1] . "</TD>\n"; echo "<TD nowrap>" . $data_array[2] . "</TD>\n"; echo "<TD nowrap>" . $data_array[3] . "</TD>\n"; echo "<TD nowrap>" . $data_array[4] . "</TD>\n"; echo "<TD nowrap>" . $data_array[5] . "</TD>\n"; echo "<TD nowrap>" . $data_array[6] . "</TD>\n"; echo "<TD nowrap><INPUT type=\"submit\" value=\" 詳細\"></TD>\n"; echo "</FORM>\n"; echo "</TR>\n"; //データ表示件数を1加算 $data_view++; } ?> <TR> <TH nowrap>詳細</TH> <TH nowrap>No.</TH> <TH nowrap>公開日</TH> <TH nowrap>求人の概要</TH> <TH nowrap>業界</TH> <TH nowrap>規模</TH> <TH nowrap>上場区分</TH> <TH nowrap>募集職種</TH> </TR> </TABLE> 現状、表示するとNo.が昇順で表示されます。 このNo.を降順で表示させるにはどうすれば良いでしょうか? 教えてください。

    • 締切済み
    • PHP
  • PHPとHTMLをまとめてコメントアウトしたいので

    HTMLの中にPHPが混じっているコードを、上から下まで一気にコメントアウトしたいのですが、どうしたらいいでしょうか? PHPとHTMLに分け、それぞれコメントアウトしていくしかないのでしょうか? それだともの凄く見難くなるのですが…… 後、HTML複数行コメントアウトの中に、PHPコメントアウトを書いてもいいのでしょうか? 例) ----------------------------------------------------- ・今日の天気予報<br> ・一覧 … <?php echo array_sum($hoge); ?> 全国<br>  <table>  <tr id="Theading" >  <th id="Theading"> Yahoo</th>  <th id="Theading"> livedoor</th>  <th id="Theading"> excite</th>  </tr>  <?php foreach($hoge as $k => $v){ ?>  <tr id="Tvalues">  <td><?php echo $piyo; ?></td>  <td><?php echo $k; ?></td>  <td><?php echo $v; ?></td>  <?php $piyo++; ?>  </tr>  <?php } ?>  </table> <br><br> -----------------------------------------------------

    • ベストアンサー
    • PHP
  • PHPでcsvファイルを一覧表示するにはどうすれば良いのでしょうか?

    <?php //ファイルを開く $fp = fopen('maillog.csv', 'r') or die('ファイルが開けません'); //テーブルを出力 echo '<table border="1">'; while ($field_array = fgetcsv($fp, 10000, ',', '"')) { echo '<tr>'; foreach ($field_array as $value) { echo '<td>'.htmlspecialchars($value, ENT_QUOTES).'</td>'; } echo '</tr>'; } echo '<table>'; //ファイルを閉じる fclose($fp); ?> プログラムだと、全ての項目が表示されてしまうので 少ない項目(3~4つ)で表示できるにはどうすれば良いのでしょうか? また、各項目毎のタイトルも付けたいのですが お願いします。

    • 締切済み
    • PHP
  • phpについて質問です。

    php初心者です。 以下のようなコードを書きました。テストの点数を配列に用意し最大値を表示したいのですがうまくいきません。 どなたかご教授お願いします。 <html> <body> <?php $score = array(20, 21, 59, 100, 78); $max = 0; ?> <table border = "2"> <tr bgcolor = aqua> <th>番号</th> <th>点数</th> </tr> <?php for($i=0; $i<count($score); $i++){ if($max < $socre[$i]) $max = $score[$i]; print"<tr>"; print"<td>{$i}</td><td>{$score[$i]}</td>\n"; print"</tr>\n"; } print"</table>\n"; print"</br>\n"; ?> <?php print"最高点は{$max}です。\n"; ?> </body> </html> foreachをつかえばうまくいきました。 for文ではいけないのでしょうか。 最大値が0と表示されるのでどうやらif文の条件分岐がうまくいってないようなのですが..... 初心者なので勘違いをしているところがあると思います。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう