生成带有m个可能字符的字符串列表(n长度)
问题描述:
我需要生成一个带有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
答
你想获得一个随机字符串,长度为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;
}
,如果我误解了你的意图,你真的想我很抱歉所有可能性;)
我想你需要重构你的代码,因为我觉得你使用正则表达式,你algoritmth得到递归。附:对不起我的英语不好。 – Naumov
@Naumov,谢谢你的回答。我没有使用正则表达式,但是,我正在使用的函数是递归的 – daniel
请提供您的代码。 –