2013-02-11 22 views
1

我想爲文件名稱生成一個隨機的5位數字,但有例外。
如果PHP將生成例如數字65,我想要設置00065(僅5位數字)。
我有一個陣列誰包含了發電機異常:
$uploaded_files= array(00178, 49856, 32183, 02004, 01585);
在陣是誰已經存在的文件名,而數生成器是非常重要的忽略它們,以避免可能的錯誤。
謝謝。PHP - 從數組中生成一個隨機的5位數字例外

回答

0

考慮不re-invent the wheel,尤其是當輪在one wayanother你的語言是可用的。這就是說:

/** 
* Get random number outside an exception list 
* 
* @param array $exception Exception list 
*/ 
function getRandom($exception=array('00001', '00002', '00003', '00004', '00005')) { 
    $rand=str_pad(mt_rand(0,10),5,0,STR_PAD_LEFT); 
    if(in_array($rand,$exception))return getRandom($exception); 
    return $rand; 
} 

var_dump(
    getRandom(), 
    getRandom(), 
    getRandom(), 
    getRandom(), 
    getRandom(), 
    getRandom() 
); 

請注意,這種類型的實現真的很昂貴的碰撞真的很快,特別是如果異常列表增長。

+0

你讓我微笑着重新發明輪子,但你是對的。感謝您的getRandom功能! – CBuzatu 2013-02-11 12:47:01

0

試試這個:

//create a rand_value initially 
while(in_array($rand_value, $uploaded_files) { 
    $rand_value = rand(0, 99999); 
    $rand_value = sprintf("%05s", $rand_value); 
} 
+0

謝謝,我會試試這個。 – CBuzatu 2013-02-11 12:12:30

+0

'<?php $ uploaded_files = array(01,02,03,04,05); $ rand_value = rand(0,15); $ rand_value = sprintf(「%02s」,$ rand_value); if(in_array($ rand_value,$ uploaded_files)){ \t echo'Initial random-value:'。$ rand_value。'
'; \t echo'Regenerated random-value:'; \t $ rand_value = rand(0,15); \t $ rand_value = sprintf(「%02s」,$ rand_value); } else { } echo $ rand_value; ?>' 如果'in_array'中的PHP會生成一個rand並檢查數組中的誰,我該怎麼辦?請檢查代碼。 – CBuzatu 2013-02-11 12:24:12

+0

我編輯了我的代碼,請看看它。 – ogzd 2013-02-11 12:35:40