使用PHP脚本

时间:2016-11-24 14:40:14

标签: php arrays

我有一个问题,我认为我可以用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,但实际上并不是那么多,所以很有可能我没有注意到解决方案很容易......

1 个答案:

答案 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);

?>