如何将数组随机拆分为 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"]]

我想要成对的不同值。

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

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

这是一个通过递归调用 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;
}