如何在'if'中嵌套'for'语句?

时间:2012-01-27 09:02:57

标签: php if-statement for-loop

在我正在研究的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";
}

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

3 个答案:

答案 0 :(得分:4)

一个选项是将循环移动到自己的函数中:

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

if($foo && $bar && performTests()) {
  …
} else {
  …
}

答案 1 :(得分: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";
}

答案 2 :(得分:0)

你不能真的。但是,您可以在第一次测试失败后立即中断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; 
}