0

ユーザーを追跡するMySQLテーブル(履歴)を使用するPHPゲームと、次のような答えを知っている回数があります。

username answer
-------- ------
user1    answer1
user2    answer2
user1    answer3

など そして、このテーブルを使用して最高のプレーヤーを出力したいので、次のような配列を実装しようとしています

public function getBestPlayers($hrows) /*history_rows*/
{
$ray=array();
$hlen = count($hrows);

for($i=0;$i<$hlen;$i++)
{
    $curnick = $hrows[$i]['knower'];
    $ray[$curnick]; //my attempt to "set" the index
    if($ray[$curnick]!=NULL)
    {
        $ray[$curnick]++;
    }
    else
    {
        $ray[$curnick]=1;
    }
}//for
$ray = sort($ray);
return $ray;
}//getBestPlayers()

結局、私は$ray['user1'] = 2 , $ray['user2'] = 1などを持っています。しかし、これは「未定義のインデックス:user1」というエラーを出します。私は何をすべきか?前もって感謝します..

4

2 に答える 2

3

MySql にこれを行わせる必要があります。これにより、はるかに高速かつ簡単になります。

SELECT username, COUNT(*) AS score FROM tbl GROUP BY username ORDER BY score DESC

これは、フォームの結果セットを返します

username score
-------- ------
user1    2
user2    1
于 2013-01-14T00:34:11.097 に答える
0

$ray[$curnick];そのような配列インデックスを宣言することはできません (またすべきではありません) ため、この行を削除する必要があります。if($ray[$curnick]!=NULL)さらに、 which はその場所の配列にアクセスしようとせず、設定さif(isset($ray[$curnick]))れているかどうかを確認するだけに置き換えたいと思うかもしれません。

それ以外の場合、コードは機能しますが、統計のコレクションをデータベースにオフロードすることをお勧めします。

于 2013-01-14T00:40:56.240 に答える