PHP使用数字组合生成独特的团队

时间:2014-04-29 10:46:47

标签: php math

我正在寻找一种方法来为比赛游戏组建团队 例如,有12名候选人,每个团队有3名成员 但是,我无法弄清楚的部分是如何做到这一点,以便一名候选人永远不会在另一名候选人中两次 因为当某些候选人比其他候选人更好或更差时,这可能是不公平的 我找到了许多类似下面的脚本,但是那些创建了所有独特的组合,如下所示;
1,2,3
1,2,4

但这是不正确的,因为现在候选人1和2在团队中两次在一起。 所有候选人也必须与所有其他候选人一起成为一个团队。 有人有解决方案吗?

脚本我发现这可能会有所帮助;

function array_combination($le, $set){
            $lk = combination_number($le, count($set));
            $ret = array_fill(0, $lk, array_fill(0, $le, '') );

            $temp = array();
            for ($i = 0 ; $i < $le ; $i++)
                $temp[$i] = $i;

            $ret[0] = $temp;

            for ($i = 1 ; $i < $lk ; $i++){
                if ($temp[$le-1] != count($set)-1){
                    $temp[$le-1]++;
                } else {
                    $od = -1;
                    for ($j = $le-2 ; $j >= 0 ; $j--)
                        if ($temp[$j]+1 != $temp[$j+1]){
                            $od = $j;
                            break;
                        }
                    if ($od == -1)
                        break;
                    $temp[$od]++;
                    for ($j = $od+1 ; $j < $le ; $j++)    
                        $temp[$j] = $temp[$od]+$j-$od;
                }
                $ret[$i] = $temp;
            }
            for ($i = 0 ; $i < $lk ; $i++)
                for ($j = 0 ; $j < $le ; $j++)
                    $ret[$i][$j] = $set[$ret[$i][$j]];   

            return $ret;
        }

1 个答案:

答案 0 :(得分:1)

您可以使用最少量的代码轻松完成此操作。

检查一下:

$candidates = array(1,2,3,4,5,6,7,8,9,10,11,12);

var_dump(getTeam($candidates));

function getTeam($candidates, $team_size = 3)
{
    shuffle($candidates);
    return array_chunk($candidates, $team_size);
}

输出:

array (size=4)
  0 => 
    array (size=3)
      0 => int 5
      1 => int 9
      2 => int 10
  1 => 
    array (size=3)
      0 => int 4
      1 => int 11
      2 => int 2
  2 => 
    array (size=3)
      0 => int 3
      1 => int 8
      2 => int 7
  3 => 
    array (size=3)
      0 => int 6
      1 => int 12
      2 => int 1

每次刷新时都会发生变化。