首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP array_rand() 函數詳解:高效隨機取值與密碼生成實戰

     編輯:PHP 綜合知識

前言

array_rand() 從數組隨機取出一個或多個鍵名,是實現隨機抽獎、密碼生成、推薦算法的利器。本文驗證其性能並給出生產級密碼生成示例。

一、基本語法

array_rand(array $array, int $num = 1): mixed
// $num=1 返回單個鍵;$num>1 返回鍵名數組

二、性能驗證

測試環境:數組大小 10,000,隨機取 20 個值。
array_rand($arr, 20) 耗時約 0.005 秒。
對比手動 mt_rand 循環取值,耗時相近。結論:無性能顧慮,放心使用。

三、實戰:隨機密碼生成器

function make_password(int $length = 8): string {
    $chars = array_merge(
        range('a', 'z'), range('A', 'Z'), range(0, 9),
        str_split('!@#$%^&*()-_[]{}<>~`+=,.;:/?|')
    );
    $keys = array_rand($chars, $length);
    $password = '';
    foreach ($keys as $key) {
        $password .= $chars[$key];
    }
    return $password;
}

echo make_password(16); // 如:K9#mP2@vL5!xR7$q

優勢:字符集可靈活配置、長度可控、底層 C 實現高效隨機。

四、底層實現推測

array_rand 內部極大概率採用類似 mt_rand 索引取值的算法,故性能一致。源碼中會打亂索引順序以保證不重複(當 $num < count($arr) 時)。

五、注意事項

  • 返回的是鍵名,關聯數組需 $arr[$key] 取值。
  • $num > 數組長度會拋出 Warning 並返回 NULL。
  • PHP 7.1+ 底層隨機源升級為 Mersenne Twister,安全性更高;加密級隨機請用 random_int()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved