此时我的脚本正在工作一半,我没有重复的结果,但我并不总是得到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
答案 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);