2015-06-24 16 views
1

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

回答

1

下面是一個通過遞歸調用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

1

可能不是最有效的,但你會得到你在找什麼:

$first = array_rand($atletas); 
$second = $first; 

while($atletas[$second] == $atletas[$first]) 
{ 
    $second = array_rand($atletas); 
} 

return array($atletas[$first], $atletas[$second]); 
1

這人會是你的函數:

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); 
相關問題