0

我有一个 PHP 游戏,它使用 MySQL 表(历史记录)来跟踪用户以及他们知道答案的次数,例如:

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)if(isset($ray[$curnick]))which 不会尝试访问该位置的数组,而只会检查它是否已设置。

除此之外,您的代码可以工作,但是,将统计信息的集合卸载到数据库可能是一个好主意。

于 2013-01-14T00:40:56.240 回答