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 相关文章推荐
建立动态的WML站点(二)
Oct 09 PHP
PHP文本操作类
Nov 25 PHP
php简单封装了一些常用JS操作
Feb 25 PHP
PHP注释实例技巧
Oct 03 PHP
php SQL之where语句生成器
Mar 24 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
PHP中文乱码解决方案
Mar 05 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
JS获取地址栏参数的小例子
2013/08/23 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
opencv 识别微信登录验证滑动块位置
2018/08/07 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
实例详解Python模块decimal
2019/06/26 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
汇科协同Java笔试题
2012/03/31 面试题
大学生职业生涯规划书范文
2014/01/04 职场文书
复核员上岗演讲稿
2014/01/05 职场文书
节约用水倡议书
2014/04/16 职场文书
岗位安全生产责任书
2014/07/28 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
幼儿园中班班级总结
2015/08/10 职场文书