我有一个数组:
1,2,3,4,5,5,6,7,8,9
现在这个数组被分为三个数组(随机)
例如:
1,2,3
4,5,6
7,8,9
现在我必须再次使用相同的数字创建3个数组(1-9) 但新数组不应包含与过去数组相同的数字;
1,3,5
(不正确,3已经有1)
1,5,7
(正确,所有数字是彼此都是新的)
现在我找到了一种使用循环检测这种方法的方法,下面你会看到代码的一部分
$temp_plr
是随机创建的新数字(3个编号数组)
$team_check
位于前3个编号的数组中
这个检查会被执行,直到找到一个之前没有显示的新组合
它有效,但有时它确实很慢,这会使浏览器超时或者它只是永远循环
如果您需要更多解释,请告诉我。
if((in_array($temp_plr[0], $team_check) && in_array($temp_plr[1],$team_check))
|| (in_array($temp_plr[0],$team_check) && in_array( $temp_plr[2],$team_check))
|| (in_array($temp_plr[1],$team_check) && in_array( $temp_plr[2],$team_check))
) {
$okey = false;
}
$temp_plr
包含3个值,$team_check
还包含3个值
我用这段代码做出的最终结果的图像:
http://i57.tinypic.com/9hqv4w.png
就像你看到的那样,每个编号的3个团队中的编号与每一轮的编号不同。
答案 0 :(得分:0)
以不同的方式看待它会更容易。
获取您已经完成的第一个三重阵列。
然后,不是仅仅生成一个新的三重奏并且看它是否符合规则, make 它符合规则。
为此,通过从旧三重奏的第一行中挑选一个数字,然后从第二行中选择一个,然后从第三行中选择一个来构建新的三重奏。
例如,如果你的第一个三重奏是:
1 2 3
4 5 6
7 8 9
您可以通过从每行中选择一个随机数来生成新的三重奏:
1 5 9
2 4 7
3 6 8
这保证符合规则,并且能够从任何给定的旧三重奏中生成所有这样的结果"。