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

时间:2016-09-17 17:06:43

标签: php arrays random

我试图生成随机元素对:

<? 
$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>'; 
?>

因此我有时会得到重复的对,我不想要 - 例如:

图2b 2B 图3c

1A 1A 1A

我希望每次只获得唯一的对,例如:

图2b 1A 图3c

1A 3C 图2b

我可能做错了,我该如何解决?对不起,对此

3 个答案:

答案 0 :(得分:1)

$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生成随机对并推入数组并检查是否存在in_array为uniq

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

  

后来由@benua添加&#34;很棒,但是我需要将输出插入到html中:c a b是否可能?&#34;

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

答案 1 :(得分:0)

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

所以我要做的是生成一个包含你想要的元素的最终数组(如果你总是组合相同的元素则不需要2个数组)并对其进行array_shuffle()

答案 2 :(得分:0)

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

然后你可以提取该数组的随机项,因此永远不会重复。

<?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>';

我们可以使这段代码更有效率,但这样做很容易。