PHP array_rand():隨機獲取陣列元素

2020-07-16 10:05:30
隨機獲取陣列元素就是在不改變陣列的基礎上,從陣列中隨機的選取一個或多個元素,比如我們在網頁上隨機顯示不同的廣告,或者推薦不同的文章等等,PHP 中提供了 array_rand() 函數來幫助我們完成這一功能,下面就來詳細介紹一下這個函數。

array_rand() 函數可以從陣列中隨機獲取一個或多個元素,並返回獲取的陣列鍵值。該函數使用了偽亂數產生演算法,所以不適合密碼學場景,其語法格式如下:

array_rand($array [, $num = 1])

其中,$array 為待操作的陣列;$num 為可選引數,用於指明想要從 $array 中獲取多少個陣列元素。

提示:如果省略 $num 引數,函數預設會返回一個隨機的陣列鍵名,如果獲取的數量($num)超過了 $array 的長度,就會導致 E_WARNING 錯誤,並返回 NULL。

如果只需要獲取一個元素,array_rand() 函數會返回獲取到的鍵名,否則就返回包含隨機鍵名的陣列。函數執行成功後,就可以根據隨機獲取到的陣列鍵值來獲取具體的值。

【範例】使用 array_rand() 函數隨機獲取陣列元素。
<?php
    $array = array(
        'name'  => 'C語言中文網',
        'url'   => 'http://c.biancheng.net/php/',
        'title' => 'PHP教學',
        'article' => 'array_rand() 函數'
    );

    echo '<pre>';
    var_dump(array_rand($array));
    var_dump(array_rand($array, 2));
    var_dump(array_rand($array, 2));
    var_dump(array_rand($array, 5));
?>
執行結果如下:

string(7) "article"
array(2) {
  [0]=>
  string(3) "url"
  [1]=>
  string(5) "title"
}
array(2) {
  [0]=>
  string(4) "name"
  [1]=>
  string(3) "url"
}
NULL

鑑於 array_rand() 函數的特點,我們可以使用它來實現生成隨機驗證碼的功能,程式碼如下所示:
<?php
    function verCode(){
        $arr = 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'
        );
        $newArr = array_rand($arr, 4);
        $str = '';
        foreach ($newArr as $key => $value) {
            $str .= $arr[$value];
        }
        return $str;
    }
    echo verCode().'<br>';
    echo verCode().'<br>';
    echo verCode().'<br>';
?>
執行結果如下:

EFG5
jIO0
pw56

如果將自定義函數 verCode() 中陣列 $arr 的值換成一個個中文字元的話,還能實現類似中文驗證碼的功能。