2016-06-16 75 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; 
} 

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

相关问题