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
Dec 14 PHP
php实现mysql数据库备份类
Mar 20 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
PHP+FastCGI+Nginx配置PHP运行环境
Aug 07 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
php生成shtml类用法实例
Dec 09 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
在IIS下安装PHP扩展的方法(超简单)
Apr 10 PHP
PHP实现的多进程控制demo示例
Jul 22 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遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
PHP引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP进程同步代码实例
2015/02/12 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
浅谈vue 单文件探索
2018/09/05 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python实现批量改文件名称的方法
2015/05/25 Python
python中zip()方法应用实例分析
2016/04/16 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
Python socket模块方法实现详解
2019/11/05 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
南京某公司笔试题
2013/01/27 面试题
linux面试题参考答案(6)
2014/08/29 面试题
公务员的自我鉴定
2013/10/26 职场文书
业务员的岗位职责
2014/03/15 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
党建目标管理责任书
2014/07/25 职场文书
解除施工合同协议书
2014/10/17 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
公诉意见书范文
2015/06/05 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书