如何在PHP中将数组随机拆分为不同元素对


How to split an array into pairs of different elements in PHP randomly?

示例:

$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;
}

可能不是最高效的,但你会得到你想要的:

$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);