从数组
$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;
}
可以获得两次相同的字母。我需要阻止这一点。我想总是得到两个不同的数组元素。有人可以告诉我该怎么做吗? 感谢
答案 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
不同