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 相关文章推荐
拼音码表的生成
Oct 09 PHP
人大复印资料处理程序_查询篇
Oct 09 PHP
基于mysql的论坛(2)
Oct 09 PHP
PHP 开发工具
Dec 06 PHP
关于Appserv无法打开localhost问题的解决方法
Oct 16 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php读取文件内容的几种方法详解
Jun 26 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
iOS10推送通知开发教程
Sep 19 PHP
浅谈PHP的反射API
Feb 26 PHP
实例讲解PHP验证邮箱是否合格
Jan 28 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/10/09 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
React中嵌套组件与被嵌套组件的通信过程
2018/07/11 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
python3制作捧腹网段子页爬虫
2017/02/12 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python中hashlib模块用法示例
2017/10/30 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
SQL SERVER面试资料
2013/03/30 面试题
opencv实现图像几何变换
2021/03/24 Python
物流专业毕业生推荐信范文
2013/11/18 职场文书
受欢迎的大学生自我评价
2013/12/05 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
前厅部经理岗位职责范文
2014/02/04 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
关于环保的建议书
2014/05/12 职场文书
十二生肖观后感
2015/06/12 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
MySQL数据库 安全管理
2022/05/06 MySQL