如何动态定义数组索引?

时间:2013-01-14 00:27:56

标签: php arrays dynamic indexing

我有一个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”。 我该怎么办? 提前谢谢..

2 个答案:

答案 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])),它不会尝试访问该位置的数组,而只是检查它是否已设置。

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