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一些常用的正则表达式字符的一些转换
Jul 29 PHP
php获取地址栏信息的代码
Oct 08 PHP
php 执行系统命令的方法
Jul 07 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
Jul 25 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
Laravel实现ApiToken认证请求
Oct 14 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
tp5.1 框架join方法用法实例分析
May 26 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 结果集的分页实现代码
2009/03/10 PHP
php截取中文字符串函数实例
2015/02/23 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
javascript开发中因空格引发的错误
2010/11/08 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
Angular2从搭建环境到开发步骤详解
2016/10/17 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
python根据经纬度计算距离示例
2014/02/16 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python基于openpyxl生成excel文件
2020/12/23 Python
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
征用土地赔偿协议书
2014/09/26 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
授权委托书协议书
2014/10/16 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
退税申请报告怎么写
2015/05/18 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL