簡體   English   中英

PHP array_rand函數獲得重復結果

[英]PHP array_rand function get repeat result

我測試了php array_rand函數,發現它具有重復結果,這是我的代碼:

    $arr = range(1,10000);
    $max = 200;
    $time = 0;
    while($time < $max){
        echo array_rand($arr).'<br>';
        $time++;
    }

這是結果:

在此處輸入圖片說明

您會看到它保留了輸出重復數組索引,但我感到困惑,為什么它會如此工作,應該選擇一個隨機索引。

您可以通過執行以下操作來確保它們不會重復:

$arr = range(1,10000);
$max = 30;
$time = 0;
$used = array();
while($time < $max){
    $num = array_rand($arr);
    if( ! in_array($num, $used) ){
        echo $num . '<br>';
        $used[] = $num;
        $time++;
    }
}

您無需使用! array_rand接受最大隨機密鑰數作為第二個參數。

$arr = range(1,10000);
$max = 200;
$ran = array_rand($arr,$max);
var_dump($ran); // random keys
//tested with origin array $arr
//foreach($ran as $key) {
//    echo $arr[$key]."<br>"; 
//}

因為隨機值不是唯一的。 除非您真的必須使用1到10,000之間的數字,否則為什么不考慮使用以下函數來獲取唯一的ID?

$number_and_letters = uniqid(); 
OR 
$numbers_only = hexdec(uniqid());

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM