php使用codebase生成随机数


Posted in PHP onMarch 25, 2014

有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正则
Jul 07 PHP
PHP用户指南-cookies部分
Oct 09 PHP
PHP 处理图片的类实现代码
Oct 23 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 PHP
php中stream(流)的用法
Mar 25 #PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 #PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
Mar 25 #PHP
php获取域名的google收录示例
Mar 24 #PHP
php 使用GD库为页面增加水印示例代码
Mar 24 #PHP
php检测useragent版本示例
Mar 24 #PHP
php断点续传之如何分割合并文件
Mar 22 #PHP
You might like
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php中memcache 基本操作实例
2015/05/17 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
浅谈flask源码之请求过程
2018/07/26 Python
详解Python模块化编程与装饰器
2021/01/16 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
学校课外活动总结
2014/05/08 职场文书
安全目标责任书
2014/07/22 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
公司离职证明标准格式
2014/11/18 职场文书
培训督导岗位职责
2015/04/10 职场文书
班级联欢会主持词
2015/07/03 职场文书
iPhone13再次曝光
2021/04/15 数码科技
详解Python生成器和基于生成器的协程
2021/06/03 Python
golang中字符串MD5生成方式总结
2021/07/04 Golang