
質問があります。
ゴルフの結果の順位を表示したいと考えています。
----------------------------
$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
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.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;
}
No.4
- 回答日時:
こんにちは。
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>");
}
?>
No.3
- 回答日時:
> マイナスが大きい人が順位が高い
は問題無いのでは。関数が用意されていると思いますし、逆順にすればいいだけの話で。
重複名があるというのは仕様上問題があるのでは。プレーヤーIDを与えるなど名前とは別に一意な識別名を用意するべきです。
で、ソートですが私は勉強不足でアルゴリズム等は存じておらずこの手の方法しか考えつかないのですが、
1. スコアが同じユーザー同士を括ってグループとして分類する
2. グループ内のソートを行う
3. グループのソートを行う
4. グループの人数を評価して順位付けを行う
規模が示されていないので何とも言えませんが SQL やコーディングから工夫すればそれなりに使える速さで組めると思います。
No.2
- 回答日時:
結構複雑ですね。
1.名前のソート
2.点数のソート
3.順位付け
4.印刷
ソートは単純なバブルソート(隣接交換法)がいいでしょう。
EXCELなら似たことは簡単にできるのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
多次元配列等の AND 検索について
-
C言語の配列をPush(追加)する...
-
チェックボックス複数選択 mys...
-
$_SESSIONに二次元配列を使える...
-
特定の文からメールアドレスの...
-
配列を回すとき、最後の要素だ...
-
再帰関数を用いて配列の合計を...
-
String だと「 ByRef引数の型が...
-
foreachとかの勝手な省略?
-
変数で来た指定日に対して、+3...
-
配列をループでたくさん宣言し...
-
マッチング処理(1:N)
-
PHPでこのコード自体に意味は無...
-
ログファイルの古い日付の行を...
-
foreachで上限回数指定方法また...
-
Smarty 三次元配列を使いたい
-
System.String.Splitでエラー
-
漢字のソートについて
-
php で1から100までの素数の表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
空フィールドが表示されない
-
NGワード設定もしくはテキス...
-
PHPで ?seq= の後に続く数に応...
-
大切なPHP用語
-
HTTPのメッセージボディについ...
-
占いのPHPを作成中ですが・・・
-
XML_Serializerで複数のXMLの扱い
-
preg_replaceでの警告
-
多次元配列のカウント+1の仕方
-
二次元配列のソート方法がわか...
-
" "を省く方法を教えてください
-
phpとmysqlで「あいまい検索」...
-
PHP array関数の[ ]内の値の表示
-
usortで3つの項目を昇順・降順...
-
PEAR・MDB2のモジュールロード...
-
pg_insertで現在の時刻を挿入す...
-
functionを定義したつもりが、...
-
cakephp2.6でfindを使い合計値...
-
外部のテキストファイルを読み...
おすすめ情報