2016-09-17 30 views
-2

我试图来产生随机元素对:如何在没有重复的情况下在php中生成随机对元素?

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

我米可能做错了,我该如何解决?对不起,这个新的

回答

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 
) 

生成与同时随机对和推入的阵列,并检查是否有in_array存在是uniq的

,如果你有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> 
) 
+0

很大,但我需要输出插入到HTML这样的: c a b 这可能吗? – benua

+0

我编辑过。但从一开始就解释你需要做的事情......不是由步骤 – CatalinB

+0

抱歉:)我将在下次 – benua

0

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

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

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

我们可以使这个代码更加高效,但是这样做会很简单。

相关问题