【问题标题】:How to nest a 'for' statement in an 'if'?如何在“if”中嵌套“for”语句?
【发布时间】:2012-02-20 07:18:49
【问题描述】:

在我现在正在处理的一个 PHP 项目中,我有一些类似这样的代码:

$allVarsTrue = TRUE;

if ($foo && $bar) {
  for ($x=1;$x<=5;$x++) {
    if (!somerandomtest($x)) {
      $allVarsTrue = FALSE; // if $x fails the test, $allVarsTrue is set to false
    }
  }
} else { // if either $foo and $bar is false, $allVarsTrue is set to false
  $allVarsTrue = FALSE; 
}

if ($allVarsTrue) {
  echo "True";
} else {
  echo "False";
}

我想写得更简洁一些,像这样

// This code does not work.
if ($foo &&
    $bar &&
    for ($x=1;$x<=5;$x++) {
      somerandomtest($x);
    }) {
  echo "True";
} else {
  echo "False";
}

如何更简洁地重写现有代码?

【问题讨论】:

    标签: php if-statement for-loop


    【解决方案1】:

    你真的不能。但是,您可以在第一次测试失败后立即中断 for 循环

    if ($foo && $bar) {
      for ($x=1;$x<=5;$x++) {
        if (!somerandomtest($x)) {
          $allVarsTrue = FALSE; // if $x fails the test, $allVarsTrue is set to false
          break; //no point in firther iterating
        }
      }
    } else { // if either $foo and $bar is false, $allVarsTrue is set to false
      $allVarsTrue = FALSE; 
    }
    

    【讨论】:

      【解决方案2】:

      一种选择是将你的循环移动到它自己的函数中:

      function performTests() {
        for(…) { if(!test(…)) return FALSE; } # return early, no need to iterate over remaining items
        return TRUE;
      }
      
      if($foo && $bar && performTests()) {
        …
      } else {
        …
      }
      

      【讨论】:

        【解决方案3】:

        将其包装在一个函数中:

        function testStuff($foo, $bar){
            if (!$foo || !$bar) {
                return FALSE;
            }
            for ($x=1;$x<=5;$x++) {
                if (!somerandomtest($x)) {
                    return FALSE;
                }
            }
            return TRUE;
        }
        

        然后:

        if (testStuff($foo, $bar)) {
          echo "True";
        } else {
          echo "False";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-16
          • 1970-01-01
          相关资源
          最近更新 更多