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 相关文章推荐
基于flush()不能按顺序输出时的解决办法
Jun 29 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
PHP连接操作access数据库实例
Mar 30 PHP
php实现对象克隆的方法
Jun 20 PHP
php猜单词游戏
Sep 29 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
Laravel 错误提示本地化的实现
Oct 22 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
javascript 禁止复制网页
2009/06/11 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
python读取csv文件示例(python操作csv)
2014/03/11 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
Django中的文件的上传的几种方式
2018/07/23 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
成品仓管员岗位职责
2013/12/11 职场文书
微观物理专业自荐信
2014/01/26 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python