如何在php中生成随机的元素对而不产生重复?
我正在尝试生成随机化的元素对:如何在php中生成随机的元素对而不产生重复?,php,arrays,random,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',
<?
$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
等等
我可能做错了,我该怎么解决呢?很抱歉,这是一个新问题看起来您并不是真的想要随机对,而是想要对数组进行随机排序。你可以用它
所以我要做的是,用你想要的元素生成一个最终的数组(如果你总是组合相同的元素,就不需要两个数组),然后在上面做一个
array\u 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>';
使用while生成随机对,并将其推入一个数组中,检查数组中的是否为uniq
如果您有一个包含2个元素和$cnt>2
。。。将是一个无限循环
Late由@benua添加“太好了,但我需要像这样将输出插入html:c a b有可能吗?”
$myarray1=array('1','2','3');
$myarray2=数组('a','b','c');
$cnt=0;
$final=array();
而($cnt)
[1] =>
[2] =>
)
很好,但我需要像那样将输出插入html:可能吗?我已经编辑过了。但从一开始就说明你需要做什么。。。不,教授:)下次我会的
$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
)
$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>
)