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 相关文章推荐
一个捕获函数输出的函数
Feb 14 PHP
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
PHP 数组入门教程小结
May 20 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
PHP获取文件行数的方法
Jun 10 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 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 setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP常用的三种设计模式
2017/02/17 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Python访问MySQL封装的常用类实例
2014/11/11 Python
python中global与nonlocal比较
2014/11/21 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
化学专业毕业生自荐信
2013/11/15 职场文书
大学新生军训感言
2014/02/25 职场文书
企业精神口号
2014/06/11 职场文书
预防传染病方案
2014/06/14 职场文书
中队活动总结
2014/08/27 职场文书
实习生工作证明范本
2014/09/14 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
教师考核评语大全
2014/12/31 职场文书
元宵节寄语大全
2015/02/27 职场文书
教师节班会开场白
2015/06/01 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
如何通过cmd 连接阿里云服务器
2022/04/18 Servers