我需要生成一个包含N个长度和M个可能字符的字符串列表。目前我使用的是PHP/XAMPP。
我的函数非常适合生成包含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
发布于 2016-06-16 13:59:10
您是否正在尝试获取一个长度为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;
}
如果我误解了你的意图,而你真的想得到所有的可能性,我很抱歉;)
https://stackoverflow.com/questions/37860364
复制