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&amp;&amp;mysql)三
Oct 09 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 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常用Stream函数集介绍
2013/06/24 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
php强制下载文件函数
2016/08/24 PHP
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
Django csrf 验证问题的实现
2018/10/09 Python
Python面向对象程序设计示例小结
2019/01/30 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
初级Java程序员面试题
2016/03/03 面试题
毕业生造价工程师求职信
2013/10/17 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
毕业生自荐信
2013/12/14 职场文书
工程质量承诺书
2014/03/27 职场文书
继承权公证书
2014/04/09 职场文书
环保倡议书100字
2014/05/15 职场文书
颐和园的导游词
2015/01/30 职场文书
2015感人爱情寄语
2015/02/26 职场文书
离婚起诉状范本
2015/05/19 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
python获取字符串中的email
2022/03/31 Python