PHP也能干大事 随机函数 |
本文标签:PHP,随机函数 写在前面 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能够产生唯一的字符串,这个应用的范围可以相当广泛 四、总结 |