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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
php关联数组快速排序的方法
Apr 17 PHP
php计算整个mysql数据库大小的方法
Jun 19 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 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作的文本留言本的例子(六)
2006/10/09 PHP
php使用PDO方法详解
2014/12/27 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
Python字典简介以及用法详解
2016/11/15 Python
Python中字典和集合学习小结
2017/07/07 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
Python pandas如何向excel添加数据
2020/05/22 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
linux面试题参考答案(10)
2016/10/26 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
财务会计实习报告体会
2013/12/20 职场文书
职务说明书范文
2014/05/07 职场文书
新农村建设汇报材料
2014/08/15 职场文书
毕业生实习证明
2014/09/19 职场文书
收入证明申请书
2015/06/12 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏