当条件满足时,循环不会中断

时间:2014-04-30 05:26:58

标签: php while-loop

我在我的函数中有几个while循环,但是这个我根本无法工作。我假设while($variable == false)发生后$variable = true;会突然退出循环。这是一个简单的骨骼版本,循环内只有两个语句。

$excluded = false;
while($excluded == false):
    $excluded = in_array(strtolower($extension), $GLOBALS['codexts']) ? true : false;
    $excluded = $file != "." && $file != ".." ? false : true; 
    break;
endwhile;

在循环内部,第一个定义确实会产生false,但循环不会中断。它继续到第二个,它返回true。如果我将第二个更改为:

$excluded = $excluded ? $excluded : ($file != "." && $file != ".." ? false : true); 

...然后我得到了我想要的结果,但这只是因为我在$excluded首次定义为true时纠正了while循环的失败。我在这里做错了什么?

更新 我只是重读了手册,显然我错过了这一部分:

  

每次在循环开始时检查表达式的值,因此即使在执行嵌套语句期间此值发生更改,执行也不会停止,直到迭代结束

这就是迭代恢复为假的原因。毕竟我确实需要做手动条件休息。

2 个答案:

答案 0 :(得分:2)

$excluded = false;
while($excluded == false) {
   $excluded = in_array(strtolower($extension), $GLOBALS['codexts']) ? true : false;
   if ($excluded == true) {
     break;
   }
    $excluded = $file != "." && $file != ".." ? false : true; 
    break;
} 
?>

答案 1 :(得分:0)

问:为什么不使用常规语法?

问:为什么多余的“休息”?

问:为什么在测试前将表达式设置两次,你真的需要“?:”吗?两次???

问:你不能简化改变你的旗帜的表达式(更改“$ excluded”)吗?

建议:

$myvar = false;
while(!$myvar) {
  $myvar = << something that sets/clears my flag >>
}