0

我想用一个变量设置一个 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()循环部分的变量。这会产生一个无限循环。

那么,有没有办法在循环中使用变量作为条件?

4

3 回答 3

1

您可以使用变量作为条件,但是您的代码产生无限循环的原因是因为您没有$condition在 while 循环中进行更改。因此,如果$condition评估为 true 一次,它将继续评估为 true(因为它永远不会在您的代码中更改)。

于 2013-09-18T23:06:16.097 回答
0

使用普通变量可以更好地实现您想要做的事情:

if( blah ) {
    $conditionstate = false;
} else {
    $conditionstate = true;
}

...
} while( ... || ($work_b == $c) == $conditionstate );

如果您有更多不同的条件,则可能需要进行重组。如果真的没有办法重组它,我会犹豫是否建议它,因为很多人滥用它会导致可怕的后果,但是eval如果小心使用它可以做到你想要的并且可以安全(如果不是很快)。需要使用它通常表明您的程序结构不好。

ps 这些类型的随机数生成问题可以用如下代码更好地解决:

$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

这可以变得更优雅,但你明白了。根本不需要循环,并保证停止。

于 2013-09-18T23:06:22.380 回答
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 变量保存为布尔值。

于 2013-09-18T23:07:21.630 回答