php生成不重復隨機數
① php生成隨機數字,范圍1-100,每次生成一個數字,可以重復
echomt_rand(1,100);
請使用rand函數
intrand(int$min,int$max)
使用循環生成,假如想生成512個數字,就可以像這樣:
$num = 1;//初始化一個變數為1
for($i = 1; $i <= 512; $i++)//這個是看你要生成多少個數字,然後循環生成
{
if($num >= 100)
$num = 1;//若變數的數字大於一百,則返回變成1
echo $num."</br>";//輸出變數數字,即生成的數字,後面的</br>是換行
$num++;//然後將變數加1,即在前面生成的數字基礎上加一
}
(1)php生成不重復隨機數擴展閱讀:
密碼學安全偽隨機性。其定義為,給定隨機樣本的一部分和隨機演算法,不能有效的演算出隨機樣本的剩餘部分。
真隨機性。其定義為隨機樣本不可重現。實際上只要給定邊界條件,真隨機數並不存在,可是如果產生一個真隨機數樣本的邊界條件十分復雜且難以捕捉(比如計算機當地的本底輻射波動值),可以認為用這個方法演算出來了真隨機數。
② php隨機生成資料庫中不存在、不重復數字
說下思路:
1. 將生成的數字保存到mysql資料庫,然後每次生成的號碼不能與資料庫的數字重復,請問怎麼弄?
先讀取資料庫已存在的數字,將結果以數組格式,與rand(1,1000)的數組相比較計算前宏差集,去除這部分數字(array_diff),再shuffle,得到新的隨機數。
我覺得,你完全可以建立一個序號表,比如,1-陵判1000,每次用時先用隨機函數取(1-數據記錄數)個數值,再用這個數值取得相應的記錄,當取出之後,刪除這個記錄,這樣保證記錄總數一直會減少且數字也不會重復。
2. 有沒有什麼辦法生成的時候先生成一位數的,一位數生成滿了以後再生出兩位數的,兩位數滿瞭然後再三位數的,以此類推?
先獲取一位數的記錄,再從中隨機抽取一個,如果資料庫中沒有找到一位數的,就遞增一位數,直到找到為止。
3. 代碼的執行效率希望能越高越好!
如果想要代碼執行效率,最好盡量減少與資料庫的交互尺悔改。
③ PHP產生不重復隨機數的5個方法總結
無論是Web應用,還是WAP或者移動應用,隨機數都有其用武之地。在最近接觸的幾個小項目中,我也經常需要和隨機數或者隨機數組打交道,所以,對於PHP如何產生不重復隨機數常用的幾種方法小結一下(ps:方法1、4、5是我常用的,其餘來自網路整理)
方法一:
復制代碼
代碼如下:
<?php
$numbers
=
range
(1,50);
//shuffle
將數組順序隨即打亂
shuffle
($numbers);
//array_slice
取該數組中的某一段
$num=6;
$result
=
array_slice($numbers,0,$num);
print_r($result);
?>
方法二:
復制代碼
代碼如下:
<?php
$numbers
=
range
(1,20);
//播下隨機數發生器種子,可有可無,測試後對結果沒有影響
srand
((float)microtime()*1000000);
shuffle
($numbers);
//跳過list第一個值(保存的是索引)
while
(list(,
$number)
=
each
($numbers))
{
echo
"$number
";
}
?>
方法三:
復制代碼
代碼如下:
<?php
function
NoRand($begin=0,$end=20,$limit=5){
$rand_array=range($begin,$end);
shuffle($rand_array);//調用現成的數組隨機排列函數
return
array_slice($rand_array,0,$limit);//截取前$limit個
}
print_r(NoRand());
?>
上述可以在1-20間隨機產生5個不重復的值
方法四:
復制代碼
代碼如下:
<?php
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
?>
方法五:
復制代碼
代碼如下:
<?php
$tmp
=
range(1,30);
print_r(array_rand($tmp,10));
?>
這個可能是比叫簡單的了(ps:如果在range中指定了步長,就必須注意array_rand的第二個參數是否超出$tmp的長度)。
PHP提供非常豐富的數組函數,產生隨機數大多可以從數組這個角度出發,若你還有方法提供,歡迎給出,文章將持續更新。
④ PHP基於自增數據如何生成不重復的隨機數示例
1、 $base 基數組 如果是8位這個數組必須是8位
2、 $i 自增數,自增數不能超過8位數
當前簡單分析的結果就是以上。大家如果是全局不重復,還是建議使用uuid之類的比較合適。
⑤ php向一個空數組中添加1000個不重復的數字,要求:數字需要在0-3000中產的代碼
// 1、首先定義一個空的目標數組
$arr = [];
// 2、開始for循環
for ($i = 0; $i < 1000; ) {
****// 3、獲取0~3000之間的隨機數
****$r = rand(0, 3000);
****// 4、判斷該隨機數是否存在目標數組中
****if (!in_array($r, $arr)) {
********// 5、如果不存在,則將該隨機數添加到目標數組中
********$arr[] = $r;
********// 6、最關鍵的一步:只有向目標數組添加新值的時候才改變$i的值
********$i ++;
****}
****continue;
}
// 7、最後列印出目標數組,也可使用print_r函數
var_mp($arr);
die;
總結:該題的難點在於在什麼時候再改變計數器變數$i的值,只有數組元素新增的時候才能改變$i,使其加1,當然for循環體也可反向寫,也可採用別的循環結構,留給你自己發揮^>^。
希望能幫助到你,望採納,謝謝~
⑥ php 隨機生成不重復用戶ID
php可以使用uniqid函數生成唯一的ID
uniqid — 生成一個唯一ID
stringuniqid([string$prefix=""[,bool$more_entropy=false]])
獲取一個帶前綴、基於當前時間微秒數的唯一ID。
參數說明:
prefix:有用的參數。例如:如果在多台主機上可能在同一微秒生成唯一ID。
prefix為空,則返回的字元串長度為13。more_entropy 為 TRUE,則返回的字元串長度為23。
more_entropy:如果設置為 TRUE,uniqid() 會在返回的字元串結尾增加額外的煽(使用combined linear congruential generator)。使得唯一ID更具唯一性。
返回值:
返回字元串形式的唯一ID。
⑦ php生成三個數字並且任意兩個不重復
<?php
$arr=array(1,2,3,4,5,6,7,8);
$str="";
for($i=0;$i<3;$i++){
$index=rand(0,count($arr)-1);
while(!isset($arr[$index])){
$index=rand(0,count($arr)-1);
}
$str.=$arr[$index];
unset($arr[$index]);
}
echo$str;
?>
//如果不是這個意思再補充提問,我繼續幫你弄
⑧ php 生成多個(比如1w個)不重復的12位隨機數,請教!
一般來說你一次搞這么多隨機數,每次單獨隨機排重,1w個隨機數弄下來效率就不行了,比較隨機函數演算法還是效率不是很高;
我感覺最簡單做法,先弄好12位按順序生成大數組,第一種就是array_rand
隨機取,第二種就是把12打亂,然後用array_slice取1萬條;你這個問題我關注一下,看看其他有沒有好辦法。