我想要一个函数来生成所有可能的字母组合。函数需要的唯一参数是字符数。因此,举例来说,如果我通过“2”,它会生成:php生成所有可能的字符值
aa
ab
ac
ad
ae
..
..
zz
如果我通过3,它会产生:
aaa
aab
...
...
aaz
...
zzz
等等如果我通过4等,谢谢你提前!
我想要一个函数来生成所有可能的字母组合。函数需要的唯一参数是字符数。因此,举例来说,如果我通过“2”,它会生成:php生成所有可能的字符值
aa
ab
ac
ad
ae
..
..
zz
如果我通过3,它会产生:
aaa
aab
...
...
aaz
...
zzz
等等如果我通过4等,谢谢你提前!
好吧,从理论上讲,这个作品。我无法通过测试它的折磨。
function combinations($pass, $count = null, $l = ''){
if(is_null($count)) $count = $pass;
foreach(range('a','z') as $c){
$k = $l;
$k .= $c;
if($count == 1){
echo $k;
}else{
combinations($pass, $count-1, $k);
}
}
}
这是一个有趣的问题吧?谁在他们的正确思想实际上在生产中做到这一点? :) – 2011-12-24 08:01:15
@ emeraldcode.com我不知道,但我可以看到它用于填充静态文件。很好的解决方案顺便说一句,你的代码比我的更干净:D – Grexis 2011-12-24 08:04:06
它可能是因为我不知道foreach和范围。因为我懒得打出一个数组,所以我只是抬起头来念着旧的学校。 :)无论如何,+1先生你。 – 2011-12-24 08:09:29
查看马克贝克的答案是其真实的答案。因为我没有编写代码,所以我的PHP过于复杂而不理解PHP。另外,他看起来更聪明。 :)
<?php
function alphabetCombos($length,$prefix = '') {
for($j = 97; $j < 123; $j++) {
if ($length > 1) {
alphabetCombos($length-1,$prefix . chr($j));
} else {
echo $prefix . chr($j) . '<br />';
}
}
}
alphabetCombos(2);
?>
如果将其更改为'函数alphabetCombos($ length,$ prefix ='')'它将工作相同,并且满足只需输入一个值(长度)的问题的要求。 – Grexis 2011-12-24 07:53:54
谢谢@Grexis。我实际上不用PHP编码,所以不知道默认值。知道这么好的电话很有趣。 – 2011-12-24 07:59:35
不必要的递归....这些天有没有人使用过++增量器? – 2011-12-24 11:00:42
所有这些复杂的嵌套循环,或使用递归是完全没有必要的。
只需使用带字符的++增量器。
$string = 'a';
while ($string != 'aaaaa') {
echo $string++,PHP_EOL;
}
只要留意你的最终环路测试...使用=而非<或>类型比较
编辑
所以给你的功能,你想:
function combinations($size) {
$string = str_repeat('a',$size);
$endLoopTest = str_repeat('z',$size);
$endLoopTest++;
while ($string != $endLoopTest) {
echo $string++,PHP_EOL;
}
}
你是一个流畅的操作符先生。 +1是我被允许给你的。 :)我正在修改我的标题为“马克贝克的答案是真实的”。 – 2011-12-24 16:11:37
确实很棒。我从来不知道有可能增加一个这样的角色。我认为这只适用于数值。 – Peter 2014-12-10 15:17:05
你尝试过什么吗? – zneak 2011-12-24 07:23:04
您知道您要求的内容会导致指数性能和内存使用情况,对不对?例如,对于1个字母,您将执行26次循环并使用26个字节的内存(不包括PHP var开销),但对于8个字母,将需要208,827,064,576次循环运行和208,827,064,576个字节的内存消耗 – GordonM 2011-12-24 07:24:33
是的,但它可能需要去4个字符。 – Patrick 2011-12-24 07:26:17