【问题标题】:How to split an array into pairs of different elements in PHP randomly?如何在 PHP 中将数组随机拆分为不同元素对?
【发布时间】:2015-06-24 14:21:14
【问题描述】:

例子:

$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"]]

我想要成对的不同值。

【问题讨论】:

  • 如果您不想要相同的成对,这不是随机的。
  • 随机无相同值对
  • 这可能会变得非常复杂,并且是背包问题的一些子问题。您要在这里解决的更大的问题是什么?

标签: php arrays split chunks


【解决方案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;
}

【讨论】:

  • 谢谢!这就是我一直在寻找的。​​span>
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    这将是你的功能:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 2016-11-15
      • 2018-11-16
      • 1970-01-01
      • 2018-09-17
      • 2019-01-05
      • 2011-01-20
      • 2014-03-11
      相关资源
      最近更新 更多