2011-12-24 50 views
0

我想要一个函数来生成所有可能的字母组合。函数需要的唯一参数是字符数。因此,举例来说,如果我通过“2”,它会生成:php生成所有可能的字符值

aa 
ab 
ac 
ad 
ae 
.. 
.. 
zz 

如果我通过3,它会产生:

aaa 
aab 
... 
... 
aaz 
... 
zzz 

等等如果我通过4等,谢谢你提前!

+0

你尝试过什么吗? – zneak 2011-12-24 07:23:04

+1

您知道您要求的内容会导致指数性能和内存使用情况,对不对?例如,对于1个字母,您将执行26次循环并使用26个字节的内存(不包括PHP var开销),但对于8个字母,将需要208,827,064,576次循环运行和208,827,064,576个字节的内存消耗 – GordonM 2011-12-24 07:24:33

+0

是的,但它可能需要去4个字符。 – Patrick 2011-12-24 07:26:17

回答

-1

我可以告诉ü的两个词的逻辑..你可以申请休息

foreach (range('a','z') as $f) 
{ 
     foreach (range('a','z') as $s) 
     { 
      echo "<br/>".$f.$s; 
     } 
} 

参考:range

+0

3个字母的组合;再应用一个'foreach' – diEcho 2011-12-24 07:33:42

+1

你应该使用字符串''a'',而不是依赖于PHP的未定义常量的回退。 – alex 2011-12-24 07:39:30

+1

提示:在这里可以使用递归来获得更大的灵活性。 – GordonM 2011-12-24 07:47:05

2

好吧,从理论上讲,这个作品。我无法通过测试它的折磨。

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); 
     } 
    } 
} 
+2

这是一个有趣的问题吧?谁在他们的正确思想实际上在生产中做到这一点? :) – 2011-12-24 08:01:15

+1

@ emeraldcode.com我不知道,但我可以看到它用于填充静态文件。很好的解决方案顺便说一句,你的代码比我的更干净:D – Grexis 2011-12-24 08:04:06

+0

它可能是因为我不知道foreach和范围。因为我懒得打出一个数组,所以我只是抬起头来念着旧的学校。 :)无论如何,+1先生你。 – 2011-12-24 08:09:29

2

查看马克贝克的答案是其真实的答案。因为我没有编写代码,所以我的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); 
?> 
+1

如果将其更改为'函数alphabetCombos($ length,$ prefix ='')'它将工作相同,并且满足只需输入一个值(长度)的问题的要求。 – Grexis 2011-12-24 07:53:54

+0

谢谢@Grexis。我实际上不用PHP编码,所以不知道默认值。知道这么好的电话很有趣。 – 2011-12-24 07:59:35

+1

不必要的递归....这些天有没有人使用过++增量器? – 2011-12-24 11:00:42

10

所有这些复杂的嵌套循环,或使用递归是完全没有必要的。

只需使用带字符的++增量器。

$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; 
    } 
} 
+0

你是一个流畅的操作符先生。 +1是我被允许给你的。 :)我正在修改我的标题为“马克贝克的答案是真实的”。 – 2011-12-24 16:11:37

+0

确实很棒。我从来不知道有可能增加一个这样的角色。我认为这只适用于数值。 – Peter 2014-12-10 15:17:05

相关问题