我有一个未知长度的数组,它总是有一个可整除的值,例如:
print_r($initialarray);
Array ( [0] => 30 [1] => 31 [2] => 32 [3] => 33 [4] => 34 [5] => 35 )
我需要创建集合:
Set 1: 30 v 35; 31 v 34; 32 v 33; Set 2: 30 v 34; 31 v 33; 32 v 35; Set 3: 30 v 33; 31 v 32; 34 v 35; Set 4: 30 v 32; 33 v 34; 31 v 35; Set 5: 30 v 31; 32 v 34; 33 v 35;
值的顺序除以 v 表示它们是一个集合。集合中值的顺序无关紧要(我随机将它们放在一起)。如您所见,在任何其他集合或同一集合中不能有重复的集合匹配。
我尝试了许多不同的方法来想出一些可行的方法。我得到的最接近的是将初始值放入包含所有可能的有效匹配的级联数组中:
Array ( [0] => Array ( [0] => 35 [1] => 31 ) [1] => Array ( [0] => 34 [1] => 31 ) [2] => Array ( [0] => 33 [1] => 31 ) [3] => Array ( [0] => 32 [1] => 31 ) )
Array ( [0] => Array ( [0] => 35 [1] => 32 ) [1] => Array ( [0] => 34 [1] => 32 ) [2] => Array ( [0] => 33 [1] => 32 ) )
Array ( [0] => Array ( [0] => 35 [1] => 33 ) [1] => Array ( [0] => 34 [1] => 33 ) )
Array ( [0] => Array ( [0] => 35 [1] => 34 ) )
这些值是一个名为 $sched 的数组中的数组。 我在数组中留下了 30 个 .. 哎呀
数字是团队。每支球队都需要与每支球队比赛一次。赛程将设置为每支球队每周只打一场比赛。时间表需要设置几个星期,以允许在没有球队每周比赛超过一次的情况下进行所有比赛。
我已经使用了一个排列函数,这就是我想出上面没有相同匹配的数组的方法。我现在需要弄清楚如何输出时间表,如上面的 Sets 所示。(请记住,只要没有球队在同一组比赛中两次比赛,示例的顺序并不重要)
$count = count($initialarray);
$recount = $count -1;
for($u=0; $u < $count;$u++){
for($d=0;$d<$recount;$d++){
$vs[$u][$d] = $sched[$d][$u];
}
$recount -= 1;
}
所以这没有用,我把它复杂化了,超出了它应该的程度,我不能再解决这个问题了。任何帮助,即使它意味着重新开始,将不胜感激!