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异常处理使用示例
Feb 25 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php文件夹的创建与删除方法
Jan 24 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
Mar 18 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
php反射学习之依赖注入示例
Jun 14 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 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类
2006/07/15 PHP
用PHP编写PDF文档生成器
2006/10/09 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
2014/07/22 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
动手学习无线电
2021/03/10 无线电
网页常用特效代码整理
2006/06/23 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
自我评价200字分享
2013/12/17 职场文书
可贵的沉默教学反思
2014/02/06 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
刊首寄语大全
2014/04/11 职场文书
国旗下演讲稿
2014/05/08 职场文书
大学新闻系求职信
2014/06/03 职场文书