是否可以动态设置循环嵌套的级别 [英] is it possible to dynamically set the level of for loop nesting
问题描述
我正在制定一个算法来获得像
123
132
213
231
312
321
我正在使用嵌套foreach循环。 (..){
for(..){
for(..){
echo $ i。 $ j。 $ k。 < br />;
问题是嵌套的#循环针对3点排列进行了优化。 我怎样才能动态地设置嵌套for循环的数量,以生成4个字母或5个字母的排列?
解决方案递归方法是要走的路。但是,您也可以使用 eval
函数就像:
$ $ $ $ $ $ $ $ $循环= iteration('i',10)。迭代( J,10)。迭代( K,10)。迭代( L,10);
$ loop。=print \\ $ i \ $ j \ $ k \ $ l\\\\
\;; ($ j = 0; $ j <10; $ j ++)的
// $ loop现在有:for($ i = 0; $ i <10; 0; $ k< 10; $ k ++)for($ l = 0; $ l <10; $ l ++)print$ i $ j $ k $ l \ n;
eval($ loop); (\ $ {$ var} = 0; \ $ {$ var}< $ limit; \
函数迭代($ var,$ limit){
return $ {$变种} ++);
}
I'm working out an algorithm to get permutations like
123
132
213
231
312
321
I'm doing it using nested foreach loops.
for (..) {
for(..) {
for(..) {
echo $i . $j . $k . "<br />";
}
}
}
Problem is those # of nested loops are optimized for 3-spot permutations. How can I could I dynamically set the number of nested for loops to generate 4-letter or 5-letter permutations?
Recursive method is the way to go. But you can also use eval
function like:
$loop = iteration('i',10) . iteration('j',10). iteration('k',10). iteration('l',10);
$loop .= "print \"\$i \$j \$k \$l\\n\";";
// $loop now has: for($i=0;$i<10;$i++)for($j=0;$j<10;$j++)for($k=0;$k<10;$k++)for($l=0;$l<10;$l++) print "$i $j $k $l\n";
eval($loop);
function iteration($var,$limit) {
return "for(\${$var}=0;\${$var}<$limit;\${$var}++)";
}
这篇关于是否可以动态设置循环嵌套的级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!