PHP也能干大事 隨機函數(shù)
寫在前面
PHP也能干大事是我總結的PHP語法特性及相關函數(shù)類庫的經(jīng)典用法,并不一定是真正能實現(xiàn)四兩撥千斤的功效,但是掌握這些方法,可以在你的工作和學習上有一些幫助,希望大家能集思廣益,將《PHP也能干大事》豐富得更精彩!轉載請注明出處(3mc2.com)
二、前言
PHP是常見的腳本語言,主要是因為其簡單易學,上手快,幾乎50%以上的Web程序都有PHP的身影(不完全統(tǒng)計)。PHP為開發(fā)這提供了豐富的函數(shù)和API接口,這使得我們能夠非常方便地使用其強大的內置函數(shù)及擴展,本文是《PHP也能干大事》系列的第二篇,主要總結PHP在隨機數(shù)生成器方面的知識。
三、PHP隨機函數(shù)
PHP隨機函數(shù)主要有rand、mt_rand、array_rand,還有隨機“排列”(打亂順序)的函數(shù)shuffle、str_shuffle,能夠產(chǎn)生唯一ID的uniqid。
1、rand產(chǎn)生隨機數(shù):
<?php $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $count = strlen($base); $random = ''; for ($i=0; $i < 16; $i++) { $random.=$base[rand(0,$count-1)]; } echo $random; ?>
rand()函數(shù)是使用libc 的隨機數(shù)發(fā)生器生成隨機數(shù)的,一般較慢,且有不確定因素,建議使用mt_rand函數(shù)替代。
getrandmax()函數(shù)可以返回rand函數(shù)能夠產(chǎn)生的最大的隨機數(shù)(我的系統(tǒng)為32767),所以在設置rand函數(shù)第二個參數(shù)時不要超高getrandmax的返回值。
2、mt_rand產(chǎn)生隨機數(shù):
<?php $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $count = strlen($base); $random = ''; for ($i=0; $i < 16; $i++) { $random.=$base[mt_rand(0,$count-1)]; } echo $random; ?>
很多老的 libc 的隨機數(shù)發(fā)生器具有一些不確定和未知的特性而且很慢。PHP 的 rand() 函數(shù)默認使用 libc 隨機數(shù)發(fā)生器。mt_rand() 函數(shù)是非正式用來替換它的。該函數(shù)用了 » Mersenne Twister 中已知的特性作為隨機數(shù)發(fā)生器,它可以產(chǎn)生隨機數(shù)值的平均速度比 libc 提供的 rand() 快四倍。強烈建議在開發(fā)過程中使用mt_rand函數(shù)取代rand。
如果沒有提供可選參數(shù) min 和 max,mt_rand() 返回 0 到 mt_getrandmax() 之間的偽隨機數(shù)。例如想要 3到 20(包括 3 和 20)之間的隨機數(shù),用 mt_rand(3, 20)。
3、array_rand函數(shù)
<?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返回數(shù)組中隨機的鍵值,有點類似mt_rand()函數(shù),其余的沒什么特殊的地方,靈活運用而已。
4、shuffle函數(shù)
<?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函數(shù)是打亂一個數(shù)組的序列,有點隨機的意思,這里就放在隨機函數(shù)里了。返回值為bool值,相當于直接引用了原變量。
5、str_shuffle函數(shù)
<?php $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; echo str_shuffle($base); ?>
這里str_shuffle的功能和shuffle的功能是類似的,唯一不同的是返回值,str_shuffle的原字符串是不變的。
6、uniqid函數(shù)
<?php echo uniqid(); //54f806528172f ?>
uniqid能夠產(chǎn)生唯一的字符串,這個應用的范圍可以相當廣泛
四、總結
隨機函數(shù)幾乎是每種語言最基本的功能,PHP對于隨機函數(shù)的支持也不例外,這里介紹了rand、mt_rand、array_rand、shuffle、str_shuffle、uniqid函數(shù)的基本用法,更多可以結合實際應用靈活運用。
相關文章
PHP中auto_prepend_file與auto_append_file用法實例分析
這篇文章主要介紹了PHP中auto_prepend_file與auto_append_file用法,較為詳細的講述了配置信息的休息以及函數(shù)的用法和注意事項,需要的朋友可以參考下2014-09-09php使用$_POST或$_SESSION[]向js函數(shù)傳參
php向js函數(shù)傳參的方法有多種,可以使用$_POST也可使用$_SESSION[' '],也可用echo語句進行輸出,需要的朋友可以參考下2014-09-09解析php中static,const與define的使用區(qū)別
本篇文章是對php中static,const與define的使用區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06