我想用变量设置do-while循环的条件。这是我的代码......
$ans_type = mt_rand(1, 2);
if ($ans_type == 1){
$condition = '$work_b != $c';
$symbol = '=';
$final_note = '1';
} else {
$condition = '$work_b == $c';
$symbol = '≠';
$final_note = '2';
}
do{
$a = mt_rand(-25, 25);
$b = mt_rand(-25, 25);
$c = mt_rand(-25, 25);
$d = mt_rand(-25, 25);
if($op_1 == '–'){
$work_b = $b * -1;
} else {
$work_b = $b;
}
if($op_2 == '–'){
$work_d = $d * -1;
} else {
$work_d = $d;
}
} while ($a == 0 || $b == 0 || $c == 0 || $d == 0 || $condition);
请注意我想要放在循环的$condition
部分中的while()
变量。这会产生无限循环。
那么,有没有办法在循环中使用变量作为条件?
答案 0 :(得分:1)
您可以将变量用作条件,但是代码产生无限循环的原因是因为您没有在while循环中更改$condition
。因此,如果$condition
计算为true一次,它将继续评估为true(因为它在代码中永远不会更改)。
答案 1 :(得分:0)
使用常规变量可以更好地实现您要做的事情:
if( blah ) {
$conditionstate = false;
} else {
$conditionstate = true;
}
...
} while( ... || ($work_b == $c) == $conditionstate );
如果您的条件多种多样,可能需要进行重组。如果真的没有办法重组它,我会犹豫不决,因为很多人滥用它会产生可怕的后果,但是eval
会做你正在寻找的并且可以安全(如果不是很快)如果小心使用需要使用它通常表明你的程序结构不好。
P.S。使用以下代码可以更好地解决这些类型的随机数生成问题:
$a = mt_rand(-25, 24);
if( $a >= 0 ) {
++ $a;
}
// $a is -25 to 25, but never 0
$b = mt_rand(-25, 23);
if( $b >= min( $a, 0 ) ) {
++ $b;
}
if( $b >= max( $a, 0 ) ) {
++ $b;
}
// $b is -25 to 25, but never 0 or a
这可以变得更优雅,但你明白了。根本不需要循环,并保证停止。
答案 2 :(得分:0)
$ans_type = mt_rand(1, 2);
if ($ans_type == 1){
$condition = ($work_b != $c);
$symbol = '=';
$final_note = '1';
} else {
$condition = ($work_b == $c);
$symbol = '≠';
$final_note = '2';
}
您将$ condition作为字符串传递。只需将$ condition变量保存为布尔值。