是否可以动态设置循环嵌套的级别 [英] is it possible to dynamically set the level of for loop nesting

查看:157
本文介绍了是否可以动态设置循环嵌套的级别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在制定一个算法来获得像

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆