Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中生成随机的元素对而不产生重复?_Php_Arrays_Random - Fatal编程技术网

如何在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>
)