如何在php中生成没有重复的随机元素对


How to generate randomized pairs of elements in php without duplicates?

我正在尝试生成随机的元素对:

<? 
$myarray1=array('1','2','3'); 
$myarray2=array('a','b','c'); 
$key_rand = array_rand($myarray1);
echo '<p>'.$myarray1[$key_rand].'</p>'; 
echo '<p>'.$myarray2[$key_rand].'</p>'; 

$myarray1=array('1','2','3'); 
$myarray2=array('a','b','c'); 
$key_rand = array_rand($myarray1);
echo '<p>'.$myarray1[$key_rand].'</p>'; 
echo '<p>'.$myarray2[$key_rand].'</p>'; 

$myarray1=array('1','2','3'); 
$myarray2=array('a','b','c'); 
$key_rand = array_rand($myarray1);
echo '<p>'.$myarray1[$key_rand].'</p>'; 
echo '<p>'.$myarray2[$key_rand].'</p>'; 
?>
因此,我有时会得到重复的对,这是我不想要的-例如:

2 b2 b3 c

111

我想每次只得到唯一的对,例如:

2 b13 c

13 c2 b

等。

我可能做错了,我怎么解决这个问题?对不起,这是新的

$myarray1=array('1','2','3'); 
$myarray2=array('a','b','c'); 
$cnt=0;
$final = array();
while( $cnt<3 ) {
    $key_rand = array_rand($myarray1);
    $temp_arr = $myarray1[$key_rand].$myarray2[$key_rand];
    if( !in_array($temp_arr,$final) ) {
        $final[] = $temp_arr;
        $cnt++;
    }
}
echo "<pre>";
print_r($final);
输出:

Array
(
    [0] => 3c
    [1] => 1a
    [2] => 2b
)

使用while和push生成随机对,并检查in_array是否唯一

如果你有一个包含2个元素和$cnt>2的数组…将是一个无限循环

后来由@benua添加"很好,但我需要将输出插入到html中,像这样:c a b是可能的吗?"

$myarray1=array('1','2','3'); 
$myarray2=array('a','b','c'); 
$cnt=0;
$final = array();
while( $cnt<3 ) {
    $key_rand = array_rand($myarray1);
    if( !in_array($key_rand,$final) ) {
        $final[] = $key_rand;
        $cnt++;
    }
}
$links = array();
foreach( $final as $key ) {
    $links[] = "<a href='".$myarray1[$key]."'>".$myarray2[$key]."</a>";
}
echo "<pre>";
print_r($links);

<pre>Array
(
    [0] => <a href='1'>a</a>
    [1] => <a href='3'>c</a>
    [2] => <a href='2'>b</a>
)

看起来你并不是真的想要随机对,而是想要随机排序你的数组。您可以使用array_shuffle

所以我要做的是,用你想要的元素生成一个最终的数组(如果你总是组合相同的元素,不需要2个数组),并在上面做一个array_shuffle()

我将首先构建一个包含所有可能性的数组。

然后可以从该数组中抽取随机项,这样就不会重复了。

<?php
$myArray1=array('1','2','3'); 
$myArray2=array('a','b','c');
$myBigArray = array();
foreach($myArray1 as $array1Item){
  foreach($myArray2 as $array2Item){
    $myBigArray[] = $array1Item . $array2Item;
  }
}
// Now $myBigArray has [1a, 1b, 1c, 2a, 2b, 2c, 3a, 3b, 3c]
$randomPosition = rand(0, count($myBigArray)-1);
$randomPair = array_slice($myBigArray, $randomPosition, 1);
echo '<p>'.randomPair.'</p>';
// Note that array_slice actually modifies the input array
$randomPosition = rand(0, count($myBigArray)-1);
$randomPair = array_slice($myBigArray, $randomPosition, 1);
echo '<p>'.randomPair.'</p>';

我们可以使这段代码更有效,但这将是一个简单的方法。