有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 连续的数字。如果不进行此步骤,可能在删除重复值时造成键名不连续,给遍历带来麻烦。
相关推荐:
详解MySQL数据库的安装与密码配置
浅谈PHP的反射机制
ASP 三层架构 Convert类实现代码
禁止在图片上使用右键
php面向对象全攻略 (二) 实例化对象 使用对象成员
简单实现jsp分页
javascript instanceof 与typeof使用说明
JavaScript 函数式编程的原理
sqlserver 中charindex/patindex/like 的比较
IE bug table元素的innerHTML
JavaScript 炫彩的文字
javascript 网页上跳动的文字
层序遍历在ExtJs的TreePanel中的应用
学习ExtJS TextField常用方法
javascript getElementsByClassName 和js取地址栏参数
详解jQuery中基本的动画方法
SQLSERVER中union,cube,rollup,cumpute运算符使用说明
js css样式操作代码(批量操作)
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
javascript Keycode对照表
ASP 正则函数替换分页后的参数
PHP 存储文本换行实现方法
python 中文字符串的处理实现代码
Android 出现问题Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER解决办法
php面向对象全攻略 (七) 继承性
JQuery 确定css方框模型(盒模型Box Model)
css 有弹动效果的网页导航
php 文件上传系统手记
处理php自动反斜杠的函数代码
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
asp.net 安全的截取指定长度的html或者ubb字符串
javascript 表单中浏览文件的“浏览”按钮修改
java ZXing生成二维码及条码实例分享
444句英语口语常见语句 背下口语以后绝对不成问题了
xampp apache启动失效问题的解决方法
ASP 使用三层架构 asp中使用类
JavaScript CSS 通用循环滚动条
MySQL 错误处理例子[译]
Jquery Ajax.ashx 高效分页实现代码
详解Android中Activity的四大启动模式实验简述
tinyMCE插件开发之插入html,php,sql,js代码 并代码高亮显示
防止动态加载JavaScript引起的内存泄漏问题
jQuery 页面 Mask实现代码
php self,$this,const,static,-&gt;的使用
JS去除重复并统计数量的实现方法
Asp定时执行操作 Asp定时读取数据库(网页定时操作详解)
关于页面优化和伪静态
jQuery 数据缓存data(name, value)详解及实现
微信小程序 canvas开发实例及注意事项
正则表达式中的反向预搜索实现