2016-11-24 98 views
1

我有我以为我可以用PHP脚本解决一个问题 - 但显然,这是很多比我想象的更复杂。寻找随机团队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

在团队中出现两次的标准是什么?并且他们都可以在不同的团队中拥有差不多相同的尺寸?什么是默认的团队规模? – boroboris

+0

这似乎是一个有趣的任务,但stackoverflow不是这个问题的网站。你应该在codegolf上提出这个问题:http://codegolf.stackexchange.com/这是另一个允许实验和代码写入的堆栈交换社区。 –

+0

“shuffle($ persons)”; $ teams = array_chunk($ persons,17);'完成。 – Bobot

回答

0

团队和人成为简单的数字索引数组,然后一个关联数组team team索引是团队,值是成员名称。循环穿过人群,把他们放在一个团队中。增加团队计数器。当你到达最后一支球队,重置队计数器,用于笑声洗牌球队的顺序(避免TEAM1,TEAM2,team3,TEAM1,TEAM2,team3模式)。

<?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); 

?> 
+0

谢谢你的答复 - 这个伎俩,和男人,我学到了很多!一个问题:是否可以修改这个脚本,让每个人都出现两次?通过复制它,我可以将团队规模扩大一倍,但在这种情况下,人员可能会在同一个团队中出现两次。 – fraukeberlin

+1

当然,只需要添加一个if-then的检查,以确定该人是否已经加入到该团队中; – ivanivan