欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

如何在一个100个元素的数组中快速的随机取出50个不重复的元素

程序员文章站 2022-05-22 19:13:15
...
如何在一个100个元素的数组中快速的随机取出50个不重复的元素?


回复讨论(解决方案)

array_rand($a, 50);

现将数组去重,然后再调用随机取即可

现将数组去重,然后再调用随机取即可


数组中的数字本来就是不重复的,比如1-100个数值放在大小为100的数组中,如何快速的随机取出不重复的五十个元素?考虑到取到后面时,如49个时,会去取已经取到的数据,这个概率还是挺大的,怎么办可以解决这个问题?

1楼正解,楼主去查下手册吧,array_rand

1楼正解,楼主去查下手册吧,array_rand

请问一下array_rand是怎么实现的?

你也可以这样实现,

$num =0;$array = array(1,2,3,4,5,6,7,8,9);$arr =array();$g    = 5;$tag = true;while($tag){   $count = count($array);   $t = rand(0,1);    if($t==1){        $arr[] = $array[$num];        unset($array[$num]);    }   $num++;   if(count($arr)==$g){    $tag=false;   }   if($num == $count){     $num  = 0;   }}

搞一个空数组,array_rand随机取出一个加入数组,取第二个开始判断取出的是否已经在数组里,成功存入50条退出循环

function swap(&$a, &$b){    $temp = $b;    $b = $a;    $a = $temp;}$result = array();$src = array();for($i = 0 ; $i   

这样写怎么样

#1 不是告诉你了吗?

$a = range(1, 100);foreach(array_rand($a, 50) as $k) $r[] = $a[$k];echo join(',', $r);
一个可能的结果
3,5,6,7,10,12,13,15,16,19,20,23,30,31,33,35,37,38,39,44,46,49,51,53,54,59,61,63,64,65,66,69,71,72,74,75,77,78,80,82,83,87,88,89,91,92,96,97,98,100

$arr = array(1,2,3,3,4,56,fdas,....);
$unique = array_unique($arr);
print_r(array_rand($unique,50));

mixed array_rand ( array input [, int num_req] )


array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用。它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。

如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。

1.先用array_unique把获取不重复的元素。
2.使用shuffle打乱顺序
3.使用array_slice 获取50个元素。

例子:

$arr = array(1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8);$arr_uni = array_unique($arr);shuffle($arr_uni);$result = array_slice($arr_uni, 0, 5);print_r($result);