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
使用 php4 加速 web 传输
Oct 09 PHP
PHP IPV6正则表达式验证代码
Feb 16 PHP
apache+php+mysql安装配置方法小结
Aug 01 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
php实现数据库的增删改查
Feb 26 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 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 获取全局变量的代码
2011/04/21 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
2016/07/25 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
详解vue-cli3使用
2018/08/14 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
Vuex实现购物车小功能
2020/08/17 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
python如何读写json数据
2018/03/21 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
pycharm如何使用anaconda中的各种包(操作步骤)
2020/07/31 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
Python 可视化神器Plotly详解
2020/12/26 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
农村党员对照检查材料
2014/09/24 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL