如何在PHP中随机将数组分成不同的元素对?
问题描述:
$atletas = array("A", "B", "C", "D", "E", "Bye", "Bye", "Bye");
我的功能:
function sortear_grelha($atletas) {
shuffle($atletas);
$atletas = array_chunk($atletas, 2);
return $atletas;
}
例如预期的结果:
[["A","Bye"],["C","Bye"],["Bye","D"],["B","E"]]
输出我得到:
[["A","Bye"],["Bye","Bye"],["C","D"],["B","E"]]
我想成对的不同值。
答
下面是一个通过递归调用sortear_grelha()
直到在一对中没有重复的作品:
function sortear_grelha($atletas) {
shuffle($atletas);
$result = array_chunk($atletas, 2);
if(array_map('array_unique', $result) != $result) {
return sortear_grelha($atletas);
}
return $result;
}
+0
谢谢!这就是我一直在寻找的东西。 – FBN
答
可能不是最有效的,但你会得到你在找什么:
$first = array_rand($atletas);
$second = $first;
while($atletas[$second] == $atletas[$first])
{
$second = array_rand($atletas);
}
return array($atletas[$first], $atletas[$second]);
答
这人会是你的函数:
function sortear_grelha($atletas){
shuffle($atletas);
$atletas_new = array_chunk($atletas, 2);
$recall = false;
foreach($atletas_new as $a){
if($a[0] == $a[1]){
$recall = true;
break;
}
}
if($recall){
sortear_grelha($atletas);
}
else{
return $atletas_new;
}
}
调用该函数:
$atletas = array("A", "B", "C", "D", "E", "Bye", "Bye", "Bye");
$atletas_new = sortear_grelha($atletas);
print_r($atletas_new);
这不是随机的,如果你不想要成对的相同。 – AbraCadaver
随机,没有相同的值对 – FBN
这变得非常复杂和背包问题的一些子问题。你想在这里解决什么大问题? – deceze