我想要一個函數來生成所有可能的字母組合。函數需要的唯一參數是字符數。因此,舉例來說,如果我通過「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