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聊天室技术
Oct 09 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
Yii 2.0如何使用页面缓存方法示例
May 23 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 PHP
PDO::inTransaction讲解
Jan 28 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 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的宝库目录--PEAR
2006/10/09 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
jQuery操作cookie
2016/08/08 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
python动态性强类型用法实例
2015/05/09 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Python实现简易Web爬虫详解
2018/01/03 Python
对Django url的几种使用方式详解
2019/08/06 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
python中time、datetime模块的使用
2020/12/14 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
餐饮业会计岗位职责
2013/12/19 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
中学生自我评价范文
2014/02/08 职场文书
课程改革实施方案
2014/03/16 职场文书
检讨书范文1000字
2015/01/28 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书