使用变量中的数字和运算符进行PHP计算

使用变量中的数字和运算符进行PHP计算,php,Php,我在PHP中设置了以下变量: $settings["operator"] = '/'; $settings["figure"] = '0.6'; 然后我想对另一个变量使用上面的公式进行计算,结果是: $total = ($var->price / 0.6); 我试过这个: $total = ($var->price $settings["operator"] $settings["figure"]); 但我得到一个错误,因为代码不正确: 分析错误:语法错误,意外的“$setti

我在PHP中设置了以下变量:

$settings["operator"] = '/';
$settings["figure"] = '0.6';
然后我想对另一个变量使用上面的公式进行计算,结果是:

$total = ($var->price / 0.6);
我试过这个:

$total = ($var->price $settings["operator"] $settings["figure"]);
但我得到一个错误,因为代码不正确:

分析错误:语法错误,意外的“$settings”(T_变量)


如何使用这些变量创建计算?

您必须进行切换或类似操作

switch($settings["operator"]){
  case "/":
    $total = $var->price / $settings["figure"];
    break;

 case "+";
   $total = $var->price + $settings["figure"];
   break;
 //add others under here
}
见:

[…]该语法不可用。您最好使用eval(),这是不推荐的,特别是如果$e来自用户输入(即表单)[…]

而是按照他的建议使用开关:

$settings["operator"] = '/';
$settings["figure"] = '0.6';

switch ( $settings["operator"] ) {
  case '/':
    $total = $var->price / $settings["figure"];
    break;

// ...
}

eval()
绝对没有问题。它对很多事情都很好,你只需要知道如何安全地使用它。我不会使用开关,因为它没有那么灵活:

$allowed = array('/', '*', '-', '+');

if(in_array($settings["operator"], $allowed) && is_numeric($settings["figure"])) {
    eval('$result = ' . $var->price . $settings["operator"] . $settings["figure"] . ';');
}
echo $result;
或者更具可读性:

 eval("\$result = {$var->price} {$settings['operator']} {$settings['figure']};");

PHP不以这种方式支持变量运算符。它实际上是在试图处理以下
$total=(数字字符串)
,因此出现了语法错误

PHP确实支持,因此您可以尝试以下操作:

//poke around the PHP manual and you will find functions that do this  kind of thing.
function doDiv($a,$b) {
    return ($a/$b):
}

$settings['someMathFunction'] = 'doDiv';
$settings['figure] = 0.6;

$total = $settings['someMathFunction']($var->price, $settings['figure']);

这是非常可怕的代码。会不会有一个你不打算分开的案例?如果没有,则可以使用
开关
根据
$settings[“operator”]
的值确定要执行的操作。类似于
switch($settings[“operator”]){case'/':$total=($var->price/0.6);break;case'*':$total=($var->price*0.6);break;}
我感觉s.o.的php端充满了重复的问题。仅供参考,您的案例是/但您使用*@AbraCadaver Ah快速键入,编辑它!谢谢