【发布时间】:2016-01-20 12:50:29
【问题描述】:
我正在尝试创建一个函数来生成特定字符组的所有可能组合,并根据长度使其可变。
我有一个函数可以创建一个我想要的字符数组,这很好用。
function generate_characters($l, $n, $d) {
$r = array();
if ($l === true) {
foreach (range('a', 'z') as $index) {
array_push($r, $index);
}
}
if ($n === true) { array_push($r, '0','1','2','3','4','5','6','7','8','9'); }
if ($d === true) { array_push($r, '-'); }
return $r;
}
然后我需要让它根据 $length 创建一个包含所有可能组合的数组,例如如果 '$length = 1' 我需要以下数组
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
[6] => g
[7] => h
[8] => i
[9] => j
[10] => k
[11] => l
[12] => m
[13] => n
[14] => o
[15] => p
[.... removed some values to save on length ....]
[35] => 9
)
但是如果 '$length = 2' 我需要这个
Array
(
[0] => aa
[1] => ab
[2] => ac
[3] => ad
[4] => ae
[5] => af
[6] => ag
[7] => ah
[8] => ai
[9] => aj
[.... removed some values to save on length ....]
[1329] => 97
[1330] => 98
[1331] => 99
)
我尝试了 array_walk() 和 array_walk_recursive(),以及几个 foreach 和 while 循环,但无济于事。
我可以通过手动为每个长度执行它来使其工作,但不能通过这样做来使用可变长度,但不知道如何使其按长度可变。
function generate_two($l, $n, $d) {
$r = array();
foreach (generate_characters($l, $n, false) as $v1) {
foreach (generate_characters($l, $n, $d) as $v2) {
array_push($results, "$v1$v2");
}
}
return $r;
}
虽然没有将“-”作为第一个字符,但如果需要,我可以在生成数组后删除这些值。
谢谢,丹
【问题讨论】:
-
$r = array(); foreach (range('a', 'z') as $index) { array_push($r, $index); }只是写$r = range('a', 'z');的复杂方式 -
谢谢@axiac,我这样做是因为我可能只想要数字,而不是字母
标签: php arrays concatenation concat string-concatenation