標籤:echo 顯示 例子 開始 [1] 存在 title pre initial
因為這兩天學習了一些PHP的內建函數,所以今天就用一些內建函數配合數組來簡單的製作一個隨機驗證碼的效果。
例如:2dT5 T22c....
分析:首先分析驗證碼的組成:
1.驗證碼是由數字1-9,大寫字母A-Z,小寫字母a-z 中隨機產生的。
2.我先建立一個包含指定範圍單元的數組。(這裡應該是三個:數字,大寫字母,小寫字母)。
3.我可以將這些數組合并成一個大的數組
4.隨機打亂該函數。ps:其實覺得在這裡再做一步將數組隨機打亂,感覺也沒有什麼必要啊!因為後面我們做的不也是隨機抽取嗎?
5.在這個新的數組中隨機抽取四次。(這裡需要分兩步實現,第一步:利用array_rand()函數從數組中隨機取出四個單元,並返回隨機條目的一個或多個鍵(多個返回的是一個數組,像這裡就是返回一個包含四個元素的數組) 第二步:利用下標列印出這個數就可以了);
利用的一些內建函數:
(1)range():建立一個包含指定範圍單元的數組
1 例如:2 // array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)3 foreach ( range ( 0 , 12 ) as $number ) {4 echo $number ;
(2)array_merge():合并一個或多個數組
形式:array array_merge ( array $array1 [, array $... ] )
1 例子:2 <?php3 $array1 = array( "color" => "red" , 2 , 4 );4 $array2 = array( "a" , "b" , "color" => "green" , "shape" => "trapezoid" , 4 );5 $result = array_merge ( $array1 , $array2 );6 print_r ( $result );7 ?>
1 輸出的結果: 2 Array 3 ( 4 [color] => green 5 [0] => 2 6 [1] => 4 7 [2] => a 8 [3] => b 9 [shape] => trapezoid10 [4] => 411 )
(2)shuffle() 將數組打亂
形式:bool shuffle ( array &$array ) 注意;它返回的是一個布爾值(TRUE 或者FALSE)
重點提示:因為利用這個隨機函數之後返回的是一個布爾值,所以我們不能以自己的思維覺得我隨機打亂了就讓它輸出看一下,這種做法是錯誤的,我在第一次利用的時候也犯了同樣的錯。
解釋:這裡就是我第一次放的錯,我以為這樣子就可以得到一個打亂完的數組了,其實他真正返回的就是一個布爾值,告訴我們是否打亂成功而已。
修改版:
1 <?php2 header("content-type:text/html;charset=utf-8");3 //建立一個數組4 echo "<pre>";5 $arr1 = range(1,9);6 var_dump($arr1);7 //將數組隨機打亂8 shuffle($arr1);9 var_dump($arr1);
(4)array_rand() 從數組中取出一個或多個隨機的單元,並返回隨機條目的一個或多個鍵(多個的話就是一個數組)
形式:mixed array_rand ( array $input [, int $num_req = 1 ] )
1 例子:2 <?php3 $input = array( "Neo" , "Morpheus" , "Trinity" , "Cypher" , "Tank" );4 $rand_keys = array_rand ( $input , 2 );5 echo $input [ $rand_keys [ 0 ]] . "\n" ;6 echo $input [ $rand_keys [ 1 ]] . "\n" ;7 ?>
接下來我們就開始實現一下這個驗證碼的產生過程:
1 <?php 2 header("content-type:text/html;charset=utf-8"); 3 //建立三個數組 4 $arr1=range(1,9);//建立1-9的數組 5 $arr2=range("a","z");//建立小寫字母的數組 6 $arr3=range("A","Z");//建立大寫字母的數組 7 //將這三個數組組合成一個數組 8 $arr4=array_merge($arr1,$arr2,$arr3); 9 shuffle($arr4);//講數組打亂10 $arr5=array_rand($arr4,6);11 $arr6=array_rand($arr4,4);//從數組中隨機取出四個單元,並返回隨機條目的一個或多個鍵(多個返回的是一個數組,像這裡就是返回一個包含四個元素的數組)12 $str7=$arr4[$arr6[0]].$arr4[$arr6[1]].$arr4[$arr6[2]].$arr4[$arr6[3]];//組合13 $str8=$arr4[$arr5[0]].$arr4[$arr5[1]].$arr4[$arr5[2]].$arr4[$arr5[3]].$arr4[$arr5[4]].$arr4[$arr5[5]];14 echo "你本次的4位驗證碼是:".$str7."<br />";15 echo "你本次的6位驗證碼是:".$str8;
執行結果:
總結:1.其實這個代碼還是存在一定的問題,因為他是一次性在裡面取出四個元素,電腦的這個操作的輸出結果是它取到的這四個元素不會存在相同的情況,但是生活中的實際情況是我們輸入的驗證碼是會存在相同的情況,比如兩個小寫a,兩個大寫B,又或者兩個1,這都是可以產生的。
2.還可以做一個最佳化,就是我們可以不考慮大小寫,或者空格的存在,因為我們都知道,當我們進行驗證碼驗證的時候,即使顯示的是大寫,我們輸出小寫也是可以的,當然,這個通過內建函數也是可以實現的。
3.另外的演算法思路。其實做這個案例自己也想了其他的一些演算法,也是可以實現的。
結語: 也許在一些有更好思路的人看起來這可能有點low,但是對於剛學這些函數的我來說,其實還是挺好玩的,所以有興趣的也可以試著玩一玩。
利用PHP內建函數製作一個簡單的驗證碼