PHP - 许多if / else嵌套检查的其他替代方法?

时间:2014-01-25 23:47:58

标签: php if-statement controls structure

我有一个if / else结构。

首先检查以查看舞台的价值。我已经为你说明了3级深度的逻辑结构,但它可以变为10 ......每次从一个阶段移动到下一个阶段我们将检查次数加倍。

阶段有2个分支

下一阶段检查有4个

下一阶段有8个

依旧......

对于每个阶段(标识符),我正在调用一些函数。 然后将这些函数的值传递给下一个if / else(它检查从函数中提取的值)并执行下一次计算。

这个想法是用户输入第一个if / else,然后它进入该分支。值一直在进行。有没有办法随身携带一个值,并且一旦标志的值("舞台"在这种情况下)发生变化,就会以不同的方式进行?

  • Inside stage = 1 循环有另一个if / else循环,称为stage。
    • 如果stage = 1,则继续执行功能a,b,c。
      • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。
      • 如果stage = 0,继续并执行其他操作。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。
    • 如果stage = 0,继续并执行其他操作。
      • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。
      • 如果stage = 0,继续并执行其他操作。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。

然后对于第一阶段= 0检查,重复相同的逻辑:

  • Inside stage = 0 循环有另一个if / else循环,称为stage。
    • 如果stage = 1,则继续执行功能a,b,c。
      • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。
      • 如果stage = 0,继续并执行其他操作。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。
    • 如果stage = 0,继续并执行其他操作。
      • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。
      • 如果stage = 0,继续并执行其他操作。
        • 如果stage = 1,则继续执行功能a,b,c。
        • 如果stage = 0,请继续并执行其他操作。

如何在不必编写如此多的if / else检查的情况下复制相同的逻辑?

2 个答案:

答案 0 :(得分:0)

我在想这样的事情:

completed = "0";

if($function_flag=="0") { $data = $original_data; }

do
    {
    $data = $data_from_function;

    if($stage=="0") {
       ...call function A...    
       if($function_flag=="1") { completed = "1"; }  
       }
   if($stage=="1") {
       ...call function B...    
       if($function_flag=="1") { completed = "1"; }  
       }
   }
   while($completed=="0")        

答案 1 :(得分:0)

我不确定这是否能回答你的问题,但上述内容可以简化为


if (stage == 1 || stage == 0) { // really necessary? only if stage can have other values
    for (int i = 0; i < 3; i++) {
        if (stage == 1) {
            functionA();
            functionB();
            functionC();
        }
        else {
            somethingElse();
        }
    }
}