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中static,const与define的使用区别
Jun 18 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
php调用google接口生成二维码示例
Apr 28 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
Sep 11 PHP
php批量删除操作代码分享
Feb 26 PHP
php json相关函数用法示例
Mar 28 PHP
Yii框架实现图片上传的方法详解
May 20 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
laravel 时间格式转时间戳的例子
Oct 11 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中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
jquery中常用的SET和GET
2009/01/13 Javascript
JavaScript 对象模型 执行模型
2009/12/06 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
python实现simhash算法实例
2014/04/25 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
编写Python CGI脚本的教程
2015/06/29 Python
Python 爬虫图片简单实现
2017/06/01 Python
详解python读取和输出到txt
2019/03/29 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
python实现批量转换图片为黑白
2020/06/16 Python
Python 高效编程技巧分享
2020/09/10 Python
《乡下孩子》教学反思
2014/04/17 职场文书
教师节班会开场白
2015/06/01 职场文书
贷款担保书范本
2015/09/22 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫
pycharm无法安装cv2模块问题
2022/05/20 Python