我有一个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
等。
但这会给出错误“undefined index:user1”。
我该怎么办?
提前谢谢..
答案 0 :(得分:3)
你应该让MySql为你做这件事,这会更快更容易:
SELECT username, COUNT(*) AS score FROM tbl GROUP BY username ORDER BY score DESC
这将返回表单
的结果集username score
-------- ------
user1 2
user2 1
答案 1 :(得分:0)
您应该删除$ray[$curnick];
行,因为您不能(也不应该)尝试声明这样的数组索引。此外,您可能希望将if($ray[$curnick]!=NULL)
替换为if(isset($ray[$curnick]))
,它不会尝试访问该位置的数组,而只是检查它是否已设置。
除此之外,您的代码可以正常工作,但是,将数据集合卸载到数据库可能是个好主意。