【问题标题】:Sorting data in PHP for a single elimination tournament display in HTML在 PHP 中对数据进行排序以在 HTML 中显示单场淘汰锦标赛
【发布时间】:2011-11-17 08:43:51
【问题描述】:

我有一个包含以下列和字段的表:

userid  round faceoff username
------------------------------
  1       1     2      Kevin
  3       1     1      Steve
  4       1     3      Jake
  9       1     4      Sam
  1       2     1      Kevin
  9       2     2      Sam
  1       3     1      Kevin

圆形是列,对面是行。因此,第 1 轮的最大争球次数为 4,第 2 轮的最大争球次数为 2,依此类推。

我想像这样(基本 HTML)在用户屏幕上显示数据:

Round 1      Round 2     Final (round 3)
 Steve
              Kevin
 Kevin
                          Kevin
 Jake
              Sam
 Sam

这是我目前所拥有的:

$tor 是来自 MySQL 的数组,我 var_dump() 它和一切都在那里。我只是遇到了for 循环的问题:

for ($u=0;$u<=$torindex;$u++)
{
    for ($r=1;$r<=$torindex+1;$r++)
    {
        if ($tor[$u]['round'] == $r) 
        {
            for ($f=1;$f<=$torindex+1;$f++)
            {
                if ($tor[$u]['faceoff'] == $f) $placement[$r][$f] = $tor[$u]['userid'].":".$tor[$u]['username'];
            }
        }
    }
}

我从这里去哪里?

【问题讨论】:

  • 有什么问题?您是否尝试过并遇到问题?
  • 我实在想不出一种排序方法。
  • 对,你想要什么,你尝试了什么?是否要按 faceoff asc 对记录进行排序,并根据 round 的值将它们显示在表格的不同列中?
  • 这些数据来自哪里?它来自数据库,所以您可以使用order by?还是在别的地方?
  • 我用我正在使用的循环更新了我的答案。

标签: php sorting data-structures


【解决方案1】:

对于数据表中的每一行,您可以在 HTML 表中找到正确的行以使用以下公式显示它:

rowNum = pow(2, round - 1) + (faceoff - 1) * pow(2, round);

所以这应该在 MySQL 中工作:

SELECT * FROM tournament ORDER BY pow(2, round - 1) + (faceoff - 1) * pow(2, round);

【讨论】:

  • 刚刚试了一下,得到了结果:Steve第1轮对战1,Kevin第2轮对战1,Kevin第1轮对战2,Kevin第3轮对战1,Jake第1轮对战3,Sam第2轮争球 2,山姆第 1 轮争球 4。对我来说似乎是正确的,你能详细说明这是怎么回事吗?也许我不太明白你的问题。
【解决方案2】:

结构

过去,我曾使用 Nicholas Mossor Rathmann 的 Knockout tournament scheduler 类来完成这项任务,并取得了巨大的成功。给定球队/球员,它将根据比赛的最终得分计算平局和淘汰赛。

输出

对于 CSS/HTML 输出而不是 GD 生成的图像,我使用了 One Fork 的 jQuery & JSON to draw single-elimination tournament bracket,并为 IE 兼容性做了一些修改。

【讨论】:

    【解决方案3】:

    像您拥有它一样按轮次对其进行排序,并在您循环浏览行时跟踪当前轮次。如果该行的轮次不等于当前轮次,则您知道向右移动。您可以关闭并启动 div 或 ul 并将它们浮动到左侧。

    http://jsfiddle.net/RxDrd/

    【讨论】:

    • 如果您在编写 CSS 时不知道总轮数,这会起作用吗?
    • @Treffynnon - 是的,你可以添加一些额外的 CSS 来覆盖你将拥有的最大轮数,它会起作用。
    • 但是你仍然必须事先知道,这是不现实的。
    • 你显然会知道最大回合数。如果出于某种疯狂的原因您没有这样做,并且您不想只添加几行额外的 css 来覆盖它,您可以使用 php 输出 css 并解决您的问题。
    猜你喜欢
    • 2019-06-17
    • 2015-09-02
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    相关资源
    最近更新 更多