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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Dec 06 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
PHP编写daemon process 实例详解
Nov 13 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
mac下安装nginx和php
2013/11/04 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
星球大战与Python之间的那些事
2016/01/07 Python
详解python基础之while循环及if判断
2017/08/24 Python
机器学习python实战之手写数字识别
2017/11/01 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
python调用接口的4种方式代码实例
2019/11/19 Python
keras导入weights方式
2020/06/12 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
实习求职信
2013/12/01 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
组织生活会发言材料
2014/12/15 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
防卫过当辩护词
2015/05/21 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
创业计划书之校园超市
2019/09/12 职场文书