我在我的函数中有几个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循环的失败。我在这里做错了什么?
更新 我只是重读了手册,显然我错过了这一部分:
每次在循环开始时检查表达式的值,因此即使在执行嵌套语句期间此值发生更改,执行也不会停止,直到迭代结束
这就是迭代恢复为假的原因。毕竟我确实需要做手动条件休息。
答案 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 >>
}