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 相关文章推荐
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
May 27 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
浅析Laravel5中队列的配置及使用
Aug 04 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
PHP实现简单计算器小程序
Aug 28 PHP
laravel清除视图缓存的代码
Oct 23 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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
PHP4中实现动态代理
2006/10/09 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
vuex入门最详细整理
2020/03/04 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
python基于socket实现网络广播的方法
2015/04/29 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
Python实现多线程的两种方式分析
2018/08/29 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
Django中使用Celery的方法步骤
2020/12/07 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
创业计划书——互联网商机
2014/01/12 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
大专生自我评价
2014/01/28 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
MySQL索引失效场景及解决方案
2022/07/23 MySQL