2012-10-03 88 views
0

我需要生成長度爲20位數字的字符串。從以20個9結尾的20個零開始。我可以通過在for循環中運行正常的rand(0,9)來輕鬆完成此操作。php mt_rand生成所有長度爲零的x長度數字

for ($i = 0; $i < 20; $i++) 
{ 
    $rng_salt .= rand(0,9); 
} 

但是循環是一個漫長的過程,可以這麼說。我想嘗試弄清楚如何用mt_rand(00000000000000000000, 99999999999999999999)或類似的東西來做同樣的事情。如果可能的話,我最好想取消循環並將其分解爲單行。

+1

只需在這兩個和左墊0之間生成一個數字? –

+0

左墊?現在正在做'mt_rand()'就像我一樣,我得到關於最大或最小值的錯誤小於最小值。 – chris

+0

你指的是'STR_PAD_LEFT'國旗? – chris

回答

1

你仍然可以擁有整個循環在一行

for($i = 0, $rng_salt = ""; $i < 20; $i ++, $rng_salt .= mt_rand(0, 9)); 
var_dump($rng_salt); 

您也可以玩

$rng_salt = implode("",array_map(function($var){ return mt_rand(0, 9);}, range(0,19))); 
var_dump($rng_salt); 

約做一些洗牌

$rng_salt = array_merge(range(0,9),range(0,9)); 
shuffle($rng_salt); 
var_dump(implode("",$rng_salt)); 
+1

好吧,我知道我可以將循環分成一行,但如果可能的話,我希望徹底取消循環過程。 – chris

+1

查看更新代碼@chris – Baba

+0

好吧,你肯定給了我很多工作。生病看看哪個更適合我的整體需求,謝謝。 – chris

1

這裏條條框框思考什麼。生成範圍的隨機數到下一個小數點,然後簡單地修剪掉第一個數字[1]。

$ rng_salt = SUBSTR(mt_rand(100000000000000000000,199999999999999999999),1,20)

檢查SUBSTR參數。我可以關閉數字。

+1

這有點愚蠢,你可以填充它,更不用說OP正在運行到最大數量限制。 –

+0

是的。當然。你也可以放一下。它只會添加一個字符串操作步驟。儘管如此,它肯定比一個循環更好。 –