我得到了一个任务,让我有点疯狂,有处理字排列的部分,之后我浏览互联网,我发现一个函数来完成排列,如下图所示:如何创建一个字符串(10个字符或更长)的排列?
function permute($str) {
if (strlen($str) < 2) {
return array($str);
}
$permutations = array();
$tail = substr($str, 1);
foreach (permute($tail) as $permutation) {
$length = strlen($permutation);
for ($i = 0; $i <= $length; $i++) {
$permutations[] = substr($permutation, 0, $i) . $str[0] . substr($permutation, $i);
}
}
return $permutations;
}
这显示结果:
print_r(array_unique(permute("abcdefghi"))); // found 362880
print_r(array_unique(permute("abcdefghij"))); // error
的问题是,此功能仅能够执行的9个字符的所有置换(约362880点的组合,具有很长的时间,使浏览器不响应的tinytime)。当试图执行多达10个字符的排列,会出现一条错误消息:
致命错误:用尽134217728个字节允许内存大小(试图分配35个字节)
你有一个解决方案或另一种方式做10个或更多字符的排列?
你试图做一个简单的随机字符串发生器?因为如果是的话,我已经创建了一个,所以我可以发送给你... – 2012-02-11 05:14:51
可能重复[在PHP中的字符串排列](http://stackoverflow.com/questions/8130411/permutation-for-string-in- php) – nickb 2012-02-11 05:16:11
在整数数字中,您试图制作一个由每个包含10个字符的400万个字符串组成的数组。这是40兆字节加上开销。错误消息说,有130兆字节的限制。所以在开销的情况下,你想要的输出太大了,这听起来似乎是合理的。计算不同的东西(一次产生一个排列,而不是一次产生排列?)或增加你的限制。 – 2012-02-11 05:20:44