我试图生成随机元素对:
<?
$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
等
我可能做错了,我该如何解决?对不起,对此
答案 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>';
我们可以使这段代码更有效率,但这样做很容易。