php获取两个不同的随机数组元素

时间:2010-02-24 15:50:41

标签: php arrays random

从数组

 $my_array = array('a','b','c','d','e');

我想获得两个不同的随机元素。

使用以下代码:

 for ($i=0; $i<2; $i++) {
    $random = array_rand($my_array);  # one random array element number
    $get_it = $my_array[$random];    # get the letter from the array
    echo $get_it;
 }

可以获得两次相同的字母。我需要阻止这一点。我想总是得到两个不同的数组元素。有人可以告诉我该怎么做吗? 感谢

8 个答案:

答案 0 :(得分:17)

array_rand()可以使用两个参数,即数组和要选择的(不同)元素的数量。

mixed array_rand(array $ input [,int $ num_req = 1])
$my_array = array('a','b','c','d','e');
foreach( array_rand($my_array, 2) as $key ) {
  echo $my_array[$key];
}

答案 1 :(得分:9)

这个怎么样?

$random = $my_array; // make a copy of the array
shuffle($random); // randomize the order
echo array_pop($random); // take the last element and remove it
echo array_pop($random); // s.a.

答案 2 :(得分:6)

您可以随时删除第一次选择的元素,然后再不会选择它。如果您不想修改数组,请创建副本。

 for ($i=0; $i<2; $i++) {
    $random = array_rand($my_array);  # one random array element number
    $get_it = $my_array[$random];    # get the letter from the array
    echo $get_it;

    unset($my_array[$random]);
 }

答案 3 :(得分:3)

foreach (array_intersect_key($arr, array_flip(array_rand($arr, 2))) as $k => $v) {
    echo "$k:$v\n";
}

//or

list($a, $b) = array_values(array_intersect_key($arr, array_flip(array_rand($arr, 2))));

答案 4 :(得分:1)

这是一个简单的函数,用于从数组中提取多个随机元素。

function get_random_elements( $array, $limit=0 ){

    shuffle($array);

    if ( $limit > 0 ) {
        $array = array_splice($array, 0, $limit);
    }

    return $array;
}

答案 5 :(得分:0)

我是这样做的。希望这有助于任何人混淆。

c++11

答案 6 :(得分:0)

您可以洗牌,然后选择两片。如果要保持原始数组完整,请使用另一个变量。

$your_array=[1,2,3,4,5,6,7];
shuffle($your_array); // randomize the order
$your_array = array_slice($your_array, 0, 2); //pick 2

答案 7 :(得分:-1)

获取第一个随机数,然后使用do..while循环获取第二个:

$random1 = array_rand($my_array);
do {
    $random2 = array_rand($my_array);
} while($random1 == $random2);

这将保持循环,直到random2与random1

不同