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

WBOY
Release: 2016-06-23 13:31:46
Original
2999 people have browsed it

如何在一个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;   }}
Copy after login

搞一个空数组,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));
Copy after login


这样写怎么样

#1 不是告诉你了吗?

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

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template