循环中的PHP条件 - PHP

时间:2011-06-04 03:23:23

标签: php mysql

我有一个这样的数组:

$team_scores = array('Tigers' => 3, 'Spikes' => 6, 'Crashers' => 8, 'Fortress' => 2);

从MySQL查询创建,其中名称来自一列,值来自另一列。我想为每个团队创建一个页面,该页面应指明团队的名称及其分数和位置。因此,在这个示例中,我将有4个页面,每个页面显示团队的名称和分数,而不显示除参与的总团队之外的其他团队的任何信息。所以它会显示

  

姓名:Spikes得分:6位置:2/4,

对于Crashers来说,它将是

  

姓名:要塞得分:2位置:4/4,

我在想一个foreach循环会做但只能在一个页面上回应团队和分数,而我需要的是创建4个页面,每个项目对应一个数组。我能够通过从数据库中提取数据来做到这一点,但是从这些数据中我不认为可以在没有数据的情况下确定每个团队的位置。

这是可能的还是我要求PHP做不能做的事情?任何帮助都将深表感谢。

3 个答案:

答案 0 :(得分:4)

请勿在PHP中执行此操作。您希望在SQL查询中使用类似ORDER BY子句的内容来按分数对结果进行排序。然后,您可以在查询上使用LIMIT一次只获取一行,并将其与偏移量组合以获得您需要的行。

答案 1 :(得分:1)

在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);
}

答案 2 :(得分:0)

使用$ _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";
   }
}