PHP也能干大事 随机函数


Posted in PHP onApril 14, 2015

写在前面

PHP也能干大事是我总结的PHP语法特性及相关函数类库的经典用法,并不一定是真正能实现四两拨千斤的功效,但是掌握这些方法,可以在你的工作和学习上有一些帮助,希望大家能集思广益,将《PHP也能干大事》丰富得更精彩!转载请注明出处(3mc2.com)

二、前言

PHP是常见的脚本语言,主要是因为其简单易学,上手快,几乎50%以上的Web程序都有PHP的身影(不完全统计)。PHP为开发这提供了丰富的函数和API接口,这使得我们能够非常方便地使用其强大的内置函数及扩展,本文是《PHP也能干大事》系列的第二篇,主要总结PHP在随机数生成器方面的知识。

三、PHP随机函数

PHP随机函数主要有rand、mt_rand、array_rand,还有随机“排列”(打乱顺序)的函数shuffle、str_shuffle,能够产生唯一ID的uniqid。

1、rand产生随机数:

<?php
$base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$count = strlen($base);
$random = '';
for ($i=0; $i < 16; $i++) { 
 $random.=$base[rand(0,$count-1)];
}
echo $random;
?>

rand()函数是使用libc 的随机数发生器生成随机数的,一般较慢,且有不确定因素,建议使用mt_rand函数替代。

getrandmax()函数可以返回rand函数能够产生的最大的随机数(我的系统为32767),所以在设置rand函数第二个参数时不要超高getrandmax的返回值。

2、mt_rand产生随机数:

<?php
$base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$count = strlen($base);
$random = '';
for ($i=0; $i < 16; $i++) { 
 $random.=$base[mt_rand(0,$count-1)];
}
echo $random;
?>

很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的。该函数用了 » Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。强烈建议在开发过程中使用mt_rand函数取代rand。

如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 mt_getrandmax() 之间的伪随机数。例如想要 3到 20(包括 3 和 20)之间的随机数,用 mt_rand(3, 20)。

3、array_rand函数

<?php
$base = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');
 
$random = '';
for ($i=0; $i < 16; $i++) { 
 $random.=$base[array_rand($base)];
}
echo $random;
?>

array_rand返回数组中随机的键值,有点类似mt_rand()函数,其余的没什么特殊的地方,灵活运用而已。

4、shuffle函数

<?php
$base = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');
if(shuffle($base)){
 print_r($base);
}
?>

shuffle函数是打乱一个数组的序列,有点随机的意思,这里就放在随机函数里了。返回值为bool值,相当于直接引用了原变量。

5、str_shuffle函数

<?php
$base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
echo str_shuffle($base);
?>

这里str_shuffle的功能和shuffle的功能是类似的,唯一不同的是返回值,str_shuffle的原字符串是不变的。

6、uniqid函数

<?php
echo uniqid();
//54f806528172f
?>

uniqid能够产生唯一的字符串,这个应用的范围可以相当广泛

四、总结
随机函数几乎是每种语言最基本的功能,PHP对于随机函数的支持也不例外,这里介绍了rand、mt_rand、array_rand、shuffle、str_shuffle、uniqid函数的基本用法,更多可以结合实际应用灵活运用。

PHP 相关文章推荐
php 批量替换程序的具体实现代码
Oct 04 PHP
php中hashtable实现示例分享
Feb 13 PHP
php跨域cookie共享使用方法
Feb 20 PHP
php计算一个文件大小的方法
Mar 30 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
PHP中有关长整数的一些操作教程
Sep 11 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 #PHP
微信公众平台之快递查询功能用法实例
Apr 14 #PHP
php生成rss类用法实例
Apr 14 #PHP
php修改上传图片尺寸的方法
Apr 14 #PHP
php动态添加url查询参数的方法
Apr 14 #PHP
php保存任意网络图片到服务器的方法
Apr 14 #PHP
php实现改变图片直接打开为下载的方法
Apr 14 #PHP
You might like
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
JavaScript 未结束的字符串常量常见解决方法
2010/01/24 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
python批量同步web服务器代码核心程序
2014/09/01 Python
Python自动连接ssh的方法
2015/03/07 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Python高级特性之闭包与装饰器实例详解
2019/11/19 Python
Python模块future用法原理详解
2020/01/20 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
办公自动化专业大学生职业规划书
2014/03/06 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
小学优秀班主任材料
2014/12/17 职场文书
邀请函格式范文
2015/02/02 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
Python一行代码实现自动发邮件功能
2021/05/30 Python