我有一个问题,我认为我可以用PHP脚本解决 - 但显然,它比我想象的要复杂得多。
任务:我们有70个人,希望将他们分成17个小组。每个人应该出现一次或两次,但很明显,不是同一个团队的两次。
思考:与人员一起定义一个数组,然后将其随机分类到团队中。
$persons = array("name1","name2","name3", "... until name70"};
我的第一个想法:我认为这很容易,但事实并非如此。我想,我需要的是为每个人分配一个新值,这样看起来像这样:
$persons = array("name1" => "team1", "name2" => "team 14", "name3" => "team 10", ".....");
然后print
这个,然后再做一次。但是:第二轮必须将新数组与第一轮进行比较,因为任何一对值都不应出现两次。所以,如果" name2"与" team14"配对在第一轮比赛中,第二轮比赛必须与众不同。我没有找到解决方案来实现这一目标。
第二个想法:我认为我可以通过使用while
循环来做同样的事情17次。 while
循环应修改原始$persons
数组以仅包含5个名称并删除其余值。但是我必须将新数组与现有数组进行比较,以便不要使用相同的名称超过两次。这让我有一个问题,就是我将为最后一支球队减少人数。
正如我刚开始的那样,而我最初的想法只是导致了更多的问题,我很高兴你能得到的每一个提示,以及我可以查看的功能。我知道一些PHP,但实际上并不是那么多,所以很有可能我没有注意到解决方案很容易......
答案 0 :(得分:1)
团队和人员成为简单的数字索引数组,然后关联数组teammembers索引是团队的位置,值是成员名称。循环通过人,把他们放在一个团队。增加团队计数器。当你到达最后一个团队时,重新设置团队计数器,为团队的顺序洗牌(避免团队1,团队2,团队3,团队1,团队2,团队3模式)。
<?php
// define our people and teams as simple arrays
for($i=1;$i<71;$i++){
$people[]="person".$i;
}
for($i=1;$i<18;$i++){
$teams[]="team".$i;
}
// what team are we adding to?
$teamidx=0;
// loop through people, add them to a team
// when you run out of teams, shuffle the team
// order for giggles and start back at the first
// team
for($i=0;$i<count($people);$i++){
$teammembers[$teams[$teamidx]][]=$people[$i];
$teamidx++;
if($teamidx==count($teams)){
$teamidx=0;
shuffle($teams);
}
}
print_r($teammembers);
?>