-3

我在字符串中有一个运算符。

 $c['operator'] = ">=";

        if($sub_total.$c['operator'].$c['value'])
        {
        echo $sub_total.$c['operator'].$c['value'];

        }

它获得的输出是20610>=30000

4

6 回答 6

4

我会将可能的运算符放在switch

$result = null;

switch($c['operator'])
{

    case '>=':
        $result = $sub_total >= $c['value'];
    break;
    case '<=':
        $result = $sub_total <= $c['value'];
    break;

    // etc etc

}

这比使用 安全得多eval,并且具有清理输入的额外好处。

于 2012-10-19T13:08:13.173 回答
1

字符串不能被解释为 php 代码,除非你使用eval(小心它)。

您在if语句示例中所做的是连接字符串,并且因为连接后的字符串不是null它的评估结果true,所以if执行语句。

在您的情况下,解决方案是查看使用了哪个运算符,就像@adam 在他的解决方案中所写的那样。

顺便说一句,在字符串中包含逻辑(可能在脚本之外)不是一个好主意。

于 2012-10-19T13:06:54.640 回答
1

$sub_total.$c['operator'].$c['value']不是比较而是字符串连接。PHP 中填充的字符串始终为真,因此if- 语句始终为true.

于 2012-10-19T13:07:02.767 回答
0

使用PHP eval来评估您构建的代码。

$c['operator'] = ">=";

if(eval($sub_total.$c['operator'].$c['value']))
{
    echo $sub_total.$c['operator'].$c['value'];          
} 
于 2012-10-19T13:07:16.357 回答
0

您不能在 PHP 中这样做,您应该执行以下操作:

if ($c['operator'] == '>=' and $sub_total >= $c['value']) {
    // Do something
} else if ($c['operator'] == '<=' and $sub_total <= $c['value']) {
    // Do something else
} // etc...
于 2012-10-19T13:08:49.060 回答
0

看一下 eval 方法。虽然很危险

http://php.net/manual/en/function.eval.php

于 2012-10-19T13:09:30.570 回答