- 締切済み
順位をつけたいです。
質問があります。 ゴルフの結果の順位を表示したいと考えています。 ---------------------------- $score['makoto'] = -6; $score['yuko'] = -2; $score['kenta'] = 0; $score['hiroshi'] = 0; $score['yuko'] = 3; ---------------------------- <出力結果> 第1位:-6 makotoさん 第2位:-2 yukoさん 第3位:0 hiroshiさん kentaさん 第5位:3 yukoさん ----------------------------------------- 名前の重複はあります。 ゴルフの結果なのでマイナスが大きい人が 順位が高いくなります。 また同じスコアの人は名前をソートして、 次の順位は変わります(3位→5位) どうか宜しくお願いいたします。m(_ _)m
- みんなの回答 (5)
- 専門家の回答
みんなの回答
配列ソート関数は元々あるので 順位の付け方の部分の参考例を書きます。 $score = array( 'yuko1' => -2, 'yuko2' => 3, 'kenta' => 0, 'makoto' => -6, 'hiroshi' => 0 ); asort($score); $num = 0; $i = 1; $prev = -100; foreach($score as $name => $point) { if($point != $prev) { $prev = $point; $num = $i; } echo "第{$num}位 : {$point}\n"; echo "{$name}さん\n"; ++$i; }
- GuruGuru22
- ベストアンサー率51% (177/346)
こんにちは。 PHPは、やりはじめて日が浅いんで、 外してるかも知れんが、こんな感じ? $Name と $Score はそれぞれ対応する名前と点数で。 <?php $Name=array("yuko","kenta","makoto","hiroshi","yuko"); $Score=array(-2,0,-6,0,3); array_multisort($Score,SORT_ASC,SORT_NUMERIC,$Name,SORT_ASC,SORT_STRING); print("第1位:".$Score[0]."<br>".$Name[0]."さん<br>"); for($i=1;$i<count($Name);$i++){ if($Score[$i] != $Score[$i-1]){ print("第".($i+1)."位:".$Score[$i]."<br>"); } print($Name[$i]."さん<br>"); } ?>
- sou_sk
- ベストアンサー率71% (15/21)
> マイナスが大きい人が順位が高い は問題無いのでは。関数が用意されていると思いますし、逆順にすればいいだけの話で。 重複名があるというのは仕様上問題があるのでは。プレーヤーIDを与えるなど名前とは別に一意な識別名を用意するべきです。 で、ソートですが私は勉強不足でアルゴリズム等は存じておらずこの手の方法しか考えつかないのですが、 1. スコアが同じユーザー同士を括ってグループとして分類する 2. グループ内のソートを行う 3. グループのソートを行う 4. グループの人数を評価して順位付けを行う 規模が示されていないので何とも言えませんが SQL やコーディングから工夫すればそれなりに使える速さで組めると思います。
- ymmasayan
- ベストアンサー率30% (2593/8599)
結構複雑ですね。 1.名前のソート 2.点数のソート 3.順位付け 4.印刷 ソートは単純なバブルソート(隣接交換法)がいいでしょう。 EXCELなら似たことは簡単にできるのですが。
- toopeaan
- ベストアンサー率0% (0/1)
$score['yuko'] = -2; $score['yuko'] = 3; データが上書きされてしまいますよ。
補足
すみません。 --------------------- makoto:-6 yuko:-2 kenta:0 hiroshi:0 yuko:3 --------------------- データが保持できればどのような形でも いいです。 すみません、宜しくお願いいたします。