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获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
配置php网页显示各种语法错误
Sep 23 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
php调用自己java程序的方法详解
May 13 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 PHP
PHP中phar包的使用教程
Jun 14 PHP
PHP实现webshell扫描文件木马的方法
Jul 31 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
如何理解PHP核心特性命名空间
May 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JavaScript 脚本将当地时间转换成其它时区
2009/03/19 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
js使用心得分享
2015/01/13 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
Vue实现todo应用的示例
2021/02/20 Vue.js
Python实现读取并保存文件的类
2017/05/11 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Python面向对象总结及类与正则表达式详解
2019/04/18 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
局部内部类是否可以访问非final变量?
2013/04/20 面试题
早会主持词
2014/03/17 职场文书
行政专员求职信范文
2014/05/03 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
经营场所使用证明
2015/06/19 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
nginx实现动静分离的方法示例
2021/11/07 Servers
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL