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 文章中的远程图片采集到本地的代码
Jul 30 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
Laravel利用gulp如何构建前端资源详解
Jun 03 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
php异常处理捕获错误整理
Sep 23 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 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中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
Python建立Map写Excel表实例解析
2018/01/17 Python
Python搭建FTP服务器的方法示例
2018/01/19 Python
对python的输出和输出格式详解
2018/12/08 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
python批量创建指定名称的文件夹
2019/03/21 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
《母鸡》教学反思
2014/02/25 职场文书
大型营销活动计划书
2014/04/28 职场文书
教师求职自荐书
2014/06/14 职场文书
实习护士自荐信
2014/06/21 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
详细了解java监听器和过滤器
2021/07/09 Java/Android
浅谈如何保证Mysql主从一致
2022/03/13 MySQL