如何在PHP中随机将数组分成不同的元素对?

问题描述:

例子:如何在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"]] 

我想成对的不同值。

+0

这不是随机的,如果你不想要成对的相同。 – AbraCadaver

+0

随机,没有相同的值对 – FBN

+0

这变得非常复杂和背包问题的一些子问题。你想在这里解决什么大问题? – deceze

下面是一个通过递归调用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);