2016-06-16 56 views
0

我需要生成一個帶有N長度和M個可能字符的字符串列表。目前我正在使用PHP/XAMPP。生成帶有m個可能字符的字符串列表(n長度)

我的函數對於生成包含62個可能的字符(a-z,A-Z,0-9)和長達4個字符的字符串非常適用。但是,當我想要生成更長的字符串時,內存不足。

我已經設置了內存限制,但我仍然用完內存。

ini_set('memory_limit', '-1'); 

錯誤,我得到:

Fatal error: Out of memory (allocated 1858600960) (tried to allocate 36 bytes) in C:\xampp\htdocs\index.php on line 51 

我怎樣才能解決這個問題?生成字符串列表時,我應該切換到另一種語言以獲得更多性能嗎?

編輯,我的工作代碼:

http://pastebin.com/f6pA6Ra0 
+0

我想你需要重構你的代碼,因爲我覺得你使用正則表達式,你algoritmth得到遞歸。附:對不起我的英語不好。 – Naumov

+0

@Naumov,謝謝你的回答。我沒有使用正則表達式,但是,我正在使用的函數是遞歸的 – daniel

+2

請提供您的代碼。 –

回答

0

你想獲得一個隨機字符串,長度爲5,同時m爲可能的字符?那麼我建議採用M的隨機元素5次,而不是製作一個的數組(這是916'132'832個可能性(62^5),這個字符數組和長度爲5 !)

這裏是一個非遞歸函數,返回一個隨機字符串,您可以在其中定義大小。

function sampling($size){ 
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; 
    $output = ''; 
    $charLength = strlen($chars) - 1; 
    for ($i = 0; $i < $size; $i++) { 
     $n = rand(0, $charLength); 
     $output .= $chars[$n]; 
    } 
    return $output; 
} 

,如果我誤解了你的意圖,你真的想我很抱歉所有可能性;)

相關問題