【问题标题】:PHP Logic - How to handle score ties?PHP Logic - 如何处理分数关系?
【发布时间】:2012-07-02 21:56:53
【问题描述】:

我正在尝试根据分数分配奖品。 TIE's 时我的逻辑有问题。谁能给我逻辑指针来处理 3 人或更多人之间的平局?

更新: 目标是这个--

  1. 将绑定的人(仅限他们)组成一个数组
  2. 了解这些人的位置。

我有几个示例阶段可以略过:

示例 1 - 适用于 0 条关系

<?php
function give_prize($a, $b) {return;}

$prize = array(500, 250, 75);

$user = array(
    'user1' => 650,
    'user2' => 500,
    'user3' => 200,
    'user4' => 100,
);

$prize_count = count($prize);

for ($i = 0; $i < $prize_count; $i++) {
    give_prize($user[$i], $prize[$i]);
}

示例 2 - 适用于 1 条领带(这是一个好方法吗?)

<?php   
for ($i = 0; $i < $prize_count; $i++) {

    if (isset($user[$i+1])) {
        if ($user[$i] == $user[$i++]) {
            // My Tie breaker code
        }
    }
}

但是如果有 3 或 4 人并列,我会怎么做呢?如果检查,我应该遵循上述并做更多的事情吗?

【问题讨论】:

  • 这取决于平局的规则。如果两个人并列第一名,他们都获得一等奖吗?换句话说,你会颁发四个奖品而不是三个奖品吗?如果没有,您会在每个级别打成平手的用户之间分配奖品吗?
  • 我不确定你的平局代码试图做什么......它是如何打破平局的?
  • 大家好,我不是在寻找决胜局代码。我只是想找出一个好方法来匹配所有绑定的人。 :)
  • if ($user[$i] == $user[$i++]) 这总是正确的,因为你使用了后增量

标签: php logic


【解决方案1】:

我会首先按分数对用户进行分组,然后按降序对这些组进行排序。一旦完成,无论您有什么规则,分配奖品都会更容易。

$usersByScore = array();
foreach ($user as $name => $score) {
    $usersByScore[$score][] = $name;
}
krsort($usersByScore);

例如,这将输入$user

$user = array(
    'user1' => 500,
    'user2' => 400,
    'user3' => 750,
    'user4' => 500,
);

转入$usersByScore

$usersByScore = array(
    750 => array('user3'),
    500 => array('user1', 'user4'),
    400 => array('user2'),
);

现在您可以随意发放奖品。

【讨论】:

  • 哇,这实际上可能正是我想要达到的目标!
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2011-07-19
  • 2018-01-04
相关资源
最近更新 更多