随机配对10个元素,无需重复

时间:2014-03-21 14:42:38

标签: php for-loop random

此时我的脚本正在工作一半,我没有重复的结果,但我并不总是得到10个结果。我需要的是一种再次启动循环的方法,直到我达到10个结果而没有任何重复。任何帮助将非常感激! 这是脚本:

$randomlist = array
    (
    array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10'),
    array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10'),
    array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10'),
    );

shuffle($randomlist[1]);
shuffle($randomlist[2]);
$c = count($randomlist);
for ($i = 0; $i < 10; $i++)
{

if ($randomlist[0][$i] != $randomlist[1][$i])
    {
    $randomlist[0][$i] = $randomlist[0][$i]."/";
    $pairNumber = $randomlist[0][$i] . $randomlist[1][$i];
        echo $pairNumber.'<br>';
    }  
} 

这是我得到的结果(只有8个结果)

A1/A2
A2/A8
A4/A6
A5/A9
A6/A4
A8/A1
A9/A10
A10/A5

3 个答案:

答案 0 :(得分:1)

在第三行数组的末尾有一个逗号逗号:

array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10'),
                                                        -------^

这是一个方法 - 我们只需要一个总输出变量,以便循环继续,直到它输出总共十对。 $ i不断重置,直到满足总条件:

$total = 0; $i = 0;
while($total < 10){ 
    if ($i == 9) {
        $i=0;
    }
    if ($randomlist[0][$i] != $randomlist[1][$i]){
        echo $randomlist[0][$i] ."/". $randomlist[1][$i] ."<br>";
        $total++;
        $i++;
    }
} 

答案 1 :(得分:1)

此版本确保没有任何两个匹配对,并且相同的两个值不会被使用两次。这是它的沙箱版本:

http://sandbox.onlinephpfunctions.com/code/dc6c749a6ec9a68bd9bf0ea98d6f3bc347141607

$randomlist = array
    (
    array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10'),
    array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10')
    );

$newlist = array();

shuffle($randomlist[0]);
shuffle($randomlist[1]);

while ( count($newlist) < 10 ) 
{
  //check if both values are not equal
  //and that they are not in $newlist already
  if ( end($randomlist[0]) !== end($randomlist[1]) && !in_array(end($randomlist[0]).'/'.end($randomlist[1]), $newlist) )
  {

     //remove last values from array and add them to new array
     $l0 = array_pop($randomlist[0]);
     $l1 = array_pop($randomlist[1]);

     array_push($newlist, $l0.'/'.$l1);
  } 
  //otherwise, reshuffle.
  else 
  {
     shuffle($randomlist[0]);
     shuffle($randomlist[1]);
  }
}

var_dump($newlist);

答案 2 :(得分:0)

这可能会简化它:

$elements = array('A1','A2','A3','A4','A5','A6', 'A7', 'A8' , 'A9' , 'A10');

$found = array();
while (count($found) < 10) {
    $temp = $elements[array_rand($elements)] . '/' . $elements[array_rand($elements)];
    if (!in_array($temp, $found)) {
        $found[] = $temp;
    }
}

print_r($found);