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 函数语法介绍一
Jun 14 PHP
PHP 危险函数全解析
Sep 09 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
php实现根据身份证获取精准年龄
Feb 26 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 ZipArchive压缩函数详解实例
2013/11/06 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
全面理解Python中self的用法
2016/06/04 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
python生成带有表格的图片实例
2019/02/03 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
PyTorch中permute的用法详解
2019/12/30 Python
python自定义函数def的应用详解
2020/06/03 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
医学生实习自荐信
2013/10/01 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
软件项目实施计划书
2014/05/02 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS