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

时间:2016-05-20 21:24:39

标签: php

我在PHP中设置了这些变量:

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

然后我想在另一个变量上使用上面的算法来计算出一个最终的结果:

$total = ($var->price / 0.6);

我试过了:

$total = ($var->price $settings["operator"] $settings["figure"]);

但我收到错误是因为代码不正确:

  

解析错误:语法错误,意外' $ settings' (T_VARIABLE)'

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

4 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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']};");

答案 2 :(得分:0)

this answerKristopher

  

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

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

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

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

// ...
}

答案 3 :(得分:0)

PHP不以这种方式支持变量运算符。它本质上是试图处理以下$total = (number string string)因此语法错误。

PHP支持variable functions,因此您可以尝试以下操作:

//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']);

这是非常可怕的代码。有没有一个你不会分裂的情况?如果没有,则Y.A.G.N.I