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 类商品秒杀计时实现代码
May 05 PHP
PHP XML操作的各种方法解析(比较详细)
Jun 17 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
Mar 10 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 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数据集构建JSON格式及新数组的方法
2012/11/07 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
node.js中的console用法总结
2014/12/15 Javascript
js改变透明度实现轮播图的算法
2020/08/24 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
纯JS单页面赛车游戏制作代码分享
2017/03/03 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python入门_条件控制(详解)
2017/05/16 Python
Python中optparser库用法实例详解
2018/01/26 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
Python while循环使用else语句代码实例
2020/02/07 Python
python 安装impala包步骤
2020/03/28 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
秋季运动会稿件
2014/01/30 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
会计专业自荐信
2014/06/03 职场文书
任命书范本大全
2014/06/06 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
检讨书格式
2015/01/23 职场文书
销售合作意向书范本
2015/05/08 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫