php生成不重復的數字
1. 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循環體也可反向寫,也可採用別的循環結構,留給你自己發揮^>^。
希望能幫助到你,望採納,謝謝~
2. php 生成不重復隨機數(組)的幾種方法
您好,很高興回答您的問題
$numbers=range(1,50);
//將數組順序隨機打亂
shuffle($numbers);
//取該數組中的某一段
$result=array_slice($numbers,0,6);
print_r($result);
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
3. 如何用phpfor循環生成5位,數字字母組合,永不不重復
如果你希望永不重復 建議採用 PHP GUID
GUID是什麼
GUID: 即Globally Unique Identifier(全球唯一標識符) 也稱作 UUID(Universally Unique IDentifier) 。 GUID是一個通過特定演算法產生的二進制長度為128位的數字標識符,用於指示產品的唯一性。GUID 主要用於在擁有多個節點、多台計算機的網路或系統中,分配必須具有唯一性的標識符。
PHP中並不提供GUID的內部實現。為此我們可以自己寫演算法實現。代碼片段如下:
function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
4. php 生成多個(比如1w個)不重復的12位隨機數,請教!
一般來說你一次搞這么多隨機數,每次單獨隨機排重,1w個隨機數弄下來效率就不行了,比較隨機函數演算法還是效率不是很高;
我感覺最簡單做法,先弄好12位按順序生成大數組,第一種就是array_rand
隨機取,第二種就是把12打亂,然後用array_slice取1萬條;你這個問題我關注一下,看看其他有沒有好辦法。
5. php隨機生成資料庫中不存在、不重復數字
說下思路:
1. 將生成的數字保存到mysql資料庫,然後每次生成的號碼不能與資料庫的數字重復,請問怎麼弄?
先讀取資料庫已存在的數字,將結果以數組格式,與rand(1,1000)的數組相比較計算前宏差集,去除這部分數字(array_diff),再shuffle,得到新的隨機數。
我覺得,你完全可以建立一個序號表,比如,1-陵判1000,每次用時先用隨機函數取(1-數據記錄數)個數值,再用這個數值取得相應的記錄,當取出之後,刪除這個記錄,這樣保證記錄總數一直會減少且數字也不會重復。
2. 有沒有什麼辦法生成的時候先生成一位數的,一位數生成滿了以後再生出兩位數的,兩位數滿瞭然後再三位數的,以此類推?
先獲取一位數的記錄,再從中隨機抽取一個,如果資料庫中沒有找到一位數的,就遞增一位數,直到找到為止。
3. 代碼的執行效率希望能越高越好!
如果想要代碼執行效率,最好盡量減少與資料庫的交互尺悔改。