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脚本中include文件出错解决方法
Nov 20 PHP
php 结果集的分页实现代码
Mar 10 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
php开发环境配置记录
Jan 14 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
PHP、Java des加密解密实例
Apr 27 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 PHP
php回调函数处理数组操作示例
Apr 13 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
phpmyadmin的#1251问题
2006/11/25 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
php类中private属性继承问题分析
2012/11/01 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
php上传图片类及用法示例
2016/05/11 PHP
CCPry JS类库 代码
2009/10/30 Javascript
jquery.validate使用攻略 第一部
2010/07/01 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
python实现录音小程序
2020/10/26 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
python清空命令行方式
2020/01/13 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
搬迁通知
2015/04/20 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
python中print格式化输出的问题
2021/04/16 Python
详解MySQL集群搭建
2021/05/26 MySQL
浅谈PHP7中的一些小技巧
2021/05/29 PHP
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android