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 相关文章推荐
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
PHP判断一个gif图片是否为动态图片的方法
Nov 19 PHP
PHP学习笔记(二):变量详解
Apr 17 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
php简单实现数组分页的方法
Apr 30 PHP
Laravel手动分页实现方法详解
Oct 09 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
php将html转为图片的实现方法
2017/05/19 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
jQuery下实现等待指定元素加载完毕(可改成纯js版)
2013/07/11 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
python模拟鼠标拖动操作的方法
2015/03/11 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
优秀毕业生自我鉴定
2014/02/11 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
单位工作证明书格式
2014/10/04 职场文书
环卫工作汇报材料
2014/10/28 职场文书
个人求职信格式范文
2015/03/20 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
六年级数学教学反思
2016/02/16 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
Python实现Hash算法
2022/03/18 Python