PHP - 在do-while循环中使用变量条件?

时间:2013-09-18 23:01:24

标签: php loops do-while

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

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

3 个答案:

答案 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变量保存为布尔值。