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

WBOY
Freigeben: 2016-06-23 13:31:46
Original
2972 Leute haben es durchsucht

如何在一个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;   }}
Nach dem Login kopieren

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

function swap(&$a, &$b){    $temp = $b;    $b = $a;    $a = $temp;}$result = array();$src = array();for($i = 0 ; $i < 40 ; $i++){    $src[] = $i + 1;}$arr_len = count($src);$count = 20;$index = 0;while($index < $count){    $random = rand(0, $arr_len - $index - 1);    $result[] = $src[$random];    swap($src[$random] , $src[$arr_len - $index - 1]);    $index += 1;}print_r(json_encode($result));print_r(json_encode($src));
Nach dem Login kopieren


这样写怎么样

#1 不是告诉你了吗?

$a = range(1, 100);foreach(array_rand($a, 50) as $k) $r[] = $a[$k];echo join(',', $r);
Nach dem Login kopieren
一个可能的结果
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);
Nach dem Login kopieren

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!