我正在尝试生成随机的元素对:
<?
$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>';
我们可以使这段代码更有效,但这将是一个简单的方法。