我正在寻找一种方法来为比赛游戏组建团队
例如,有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;
}
答案 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
每次刷新时都会发生变化。