php生成N个不重复的随机数实例


Posted in PHP onNovember 12, 2013

有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 连续的数字。如果不进行此步骤,可能在删除重复值时造成键名不连续,给遍历带来麻烦。
PHP 相关文章推荐
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
使用PHP开发留言板功能
Nov 19 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 PHP
三种php连接access数据库方法
Nov 11 #PHP
PHP中ob_start函数的使用说明
Nov 11 #PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 #PHP
PHP利用str_replace防注入的方法
Nov 10 #PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 #PHP
php中autoload的用法总结
Nov 08 #PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 #PHP
You might like
用PHP4访问Oracle815
2006/10/09 PHP
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
JavaScript 学习历程和心得分享
2010/12/12 Javascript
gridpanel动态加载数据的实例代码
2013/07/18 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
Django配置跨域并开发测试接口
2020/11/04 Python
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
工商管理专业实习生自我鉴定
2013/09/29 职场文书
写给保洁员表扬信
2014/01/08 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
法人授权委托书范本
2014/09/17 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
岳麓书院导游词
2015/02/03 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server