问题描述
|
我有一个像这样的数组:
$team_scores = array(\'Tigers\' => 3,\'Spikes\' => 6,\'Crashers\' => 8,\'Fortress\' => 2);
通过MySQL查询创建,其中名称来自一列,值来自另一列。我想为每个团队创建一个页面,该页面应指明团队的名称,得分以及位置。因此,在此示例中,我将有4页,每页显示一个团队的名称和得分,而不显示除参与团队总数之外的其他团队的任何信息。所以它会显示
名称:钉得分:6位置:2/4,
对于崩溃者来说
名称:堡垒得分:2位置:4/4,
我在想一个foreach循环会做,但是只能在单页上显示团队和得分,而我需要创建4页,则数组中的每个项目一页。我只需要从数据库中提取数据就可以做到这一点,但是我认为从这样的数据中,如果不将数据放在一个数组中,就不可能确定每个团队的位置。
甚至有可能还是我要PHP做无法完成的事情?任何帮助将不胜感激。
解决方法
不要在PHP中执行此操作。您想在SQL查询中使用ORDER BY子句之类的结果对得分进行排序。然后,您可以在查询上使用LIMIT一次仅获取一行,并将其与偏移量结合使用以获取所需的确切行。
, 在MySQL中,您可以执行以下操作:
SELECT
@position:= @position + 1 AS position,score_table.*
FROM
score_table,(SELECT @position := 0) p
ORDER BY score;
然后,您可以执行以下操作:
$count = count($results);
foreach ($results as $result) {
echo \"Name: {$result[\'name\']}\";
echo \"Score: {$result[\'score\']}\";
echo \"Position: {$result[\'position\']}/{$count}\";
}
如果您要使用普通SQL(例如:与其他SQL数据库兼容)进行操作,则可以执行以下操作:
SELECT
*
FROM
score_table
ORDER BY score;
然后,考虑您已对$ results进行了数字索引:
foreach ($results as $key => $result) {
echo \'Position: \'.($key+1);
}
, 使用$ _GET找出要显示的团队:
/teams.php?team=spikes
...
$i = 0;
$nbTeams = count($team_scores)
foreach ($team_scores as $team => $score)
{
$i++;
if ($team == $_GET[team])
{
echo \"Name: $team Score: $score Position: $i/$nbTeams\";
}
}