2011-12-24 49 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

相關問題