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 反射机制实现动态代理的代码
Oct 22 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
使用php实现快钱支付功能(涉及到接口)
Jul 01 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
PHP7.0版本备注
Jul 23 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
php中时间函数date及常用的时间计算
May 12 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 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
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
python如何通过protobuf实现rpc
2016/03/06 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
台湾线上百货零售购物平台:friDay购物
2017/08/18 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
外企测试工程师面试题
2015/02/01 面试题
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
三严三实心得体会范文
2014/10/13 职场文书
行政助理岗位职责
2015/02/10 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python