PHP CodeBase: 生成N个不重复的随机数

随机数的生成函数
服务器君一共花费了216.813 ms进行了5次数据库查询>,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

有25幅作品拿去投票,一次投票需要选16幅,单个作品一次投票只能选择一次<。前面有个程序员捅了漏子,忘了把投票入库><<,有200个用户产生的投票序列为空<。那么你会如何填补这个漏子?

当然向上级反映情况。但是我们这里讨论的是技术,就是需要生成1-25之间的16个不重复的随机数>>,去填补<。具体怎么设计函数呢<?将随机数存入数组,再在数组中去除重复的值,即可生成一定数量的不重复随机数<。

程序如下:

<?php
/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定数量的不重复随机数
* $min 和 $max: 指定随机数的范围
* $num: 指定生成数量
*/
function unique_rand($min, $max, $num) {
    $count = 0;
    $return = array();
    while ($count < $num) {
        $return[] = mt_rand($min, $max);
        $return = array_flip(array_flip($return));
        $count = count($return);
    }
    shuffle($return);
    return $return;
}

$arr = unique_rand(1, 25, 16);
sort($arr);

$result = '';
for($i=0; $i < count($arr);$i++)
{
	$result .= $arr[$i].',';
}
$result = substr($result, 0, -1);
echo $result;
?>

程序运行如下:

2,3,4,6,7,8,9,10,11,12,13,16,20,21,22,24

补充几点说明:

  • 生成随机数时用了?mt_rand()?函数>。这个函数生成随机数的平均速度要比?rand()?快四倍。
  • 去除数组中的重复值时用了“翻翻法”,就是用?array_flip()?把数组的 key 和 value 交换两次>。这种做法比用?array_unique()?快得多>>。
  • 返回数组前<,先使用?shuffle()?为数组赋予新的键名,保证键名是 0-n 连续的数字。如果不进行此步骤<,可能在删除重复值时造成键名不连续<>,给遍历带来麻烦<。

延伸阅读

此文章所在专题列表如下:

  1. PHP CodeBase: 通过新浪微博API获取数据
  2. PHP CodeBase: 过滤XSS攻击的PHP函数
  3. PHP CodeBase: 将时间显示为“刚刚”“n分钟/小时前”等
  4. PHP CodeBase: 求最近一个周一和上周一的日期
  5. PHP CodeBase: 获取远程图片的体积大小
  6. PHP CodeBase: 生成N个不重复的随机数
  7. PHP CodeBase: 判断用户是否手机访问

本文地址:http://www.jzjxzzjx.com/librarys/veda/detail/2508<<,欢迎访问原出处。

不打个分吗<?

转载随意<,但请带上本文地址:

http://www.jzjxzzjx.com/librarys/veda/detail/2508

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能<。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏。

阅读一百本计算机著作吧>,少年

很多人觉得自己技术进步很慢,学习效率低>,我觉得一个重要原因是看的书少了<>。多少是多呢>?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧<。很多人知识结构不好而且不系统><,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话>,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下<。

所以<,阅读一百本计算机著作吧>,少年>!

《重来:更为简单有效的商业思维》 贾森?弗里德(Jason Fried) (作者), 大卫?汉森(David Heinemeier Hansson) (作者), Mike Rohde (插图作者), 李瑜偲 (译者)

这本书呈现的是一种更好<、更简单的经商成功之道。读完这本书>,你就会明白为什么计划实际上百害而无一益,为什么你不需要外界投资人<>,为什么将竞争视而不见反倒会发展得更好。事实是你所需要的比你想象的少得多<。你不必成为工作狂,你不必大量招兵买马>,你不必把时间浪费在案头工作和会议上>,你甚至不必拥有一间办公室<<。所有这些都仅仅是借口>>!

更多计算机宝库...

ASP300源码下载 | 微信红包群 | 设计 | 厦门旅游景点 | 旅游中国新闻网 | 钛媒体 | 健康网hsdcba | 每天资讯 | 广西农业技术信息 | 农业种植技术 |