我想列出所有可能的插入数字组合。我想出了这种方式:
for($x=1;$x<=3;$x++){
for($y=1;$y<=3;$y++){
for($e=1;$e<=3;$e++){
echo $x.$y.$e."</br>" ;
}
}
}
但是这些嵌套循环的问题在于,我必须手动放置与数字中数字一样多的循环。有没有办法使它自动/编程?
答案 0 :(得分:0)
您可以在必要时使用递归函数再次循环。
例如,此函数打印出给定数字位数的数字1-3(最小允许值为1,如果更低,它仍将输出该范围内的所有一位数字):
function variations($digits, $prefix = '') {
for ($i = 1; $i <= 3; $i++) {
$variation = $prefix . $i;
if ($digits > 1) {
variations($digits - 1, $variation);
} else {
echo $variation . "<br />";
}
}
}
variations(1);
/*
1<br />2<br />3<br />
*/
variations(2);
/*
11<br />12<br />13<br />21<br />22<br />23<br />31<br />32<br />33<br />
*/
https://3v4l.org/Rj2u7(出于显示目的,输出换行而不是"<br />"
)
有一个细微的变化,它可以将生成的数字返回到数组中,而不是直接echo
对它们进行运算,因此,如果您愿意,可以将其用于其他目的
function variations($digits, $prefix = '') {
$result = [];
for ($i = 1; $i <= 3; $i++) {
$variation = $prefix . $i;
if ($digits > 1) {
$result = array_merge($result, variations($digits - 1, $variation));
} else {
$result[] = $variation;
}
}
return $result;
}
print_r(variations(1));
/*
Array
(
[0] => 1
[1] => 2
[2] => 3
)
*/
print_r(variations(2));
/*
Array
(
[0] => 11
[1] => 12
[2] => 13
[3] => 21
[4] => 22
[5] => 23
[6] => 31
[7] => 32
[8] => 33
)
*/