【问题标题】:PHP calculations with numbers and operators from variables [duplicate]使用变量中的数字和运算符进行 PHP 计算[重复]
【发布时间】:2016-09-18 06:34:42
【问题描述】:

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

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

然后我想在另一个变量上使用上面的内容来进行计算,最终结果是:

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

我试过了:

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

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

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

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

【问题讨论】:

  • 您可以使用switch 根据$settings["operator"] 的值确定要执行的操作。类似switch($settings["operator"]){ case '/': $total = ($var->price / 0.6); break; case '*': $total = ($var->price * 0.6); break; }
  • 我感觉像 s.o. 的 php 方面。充满了重复的问题。

标签: php


【解决方案1】:

您将不得不进行切换或类似的操作。

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

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

【讨论】:

  • 仅供参考,您的情况是 / 但您使用 *
  • @AbraCadaver 啊打字快,编辑了!谢谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    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

    【讨论】:

      【解决方案4】:

      this answerKristopher

      [...] 该语法不可用。你能做的最好的就是一个 eval(),这是不推荐的,特别是如果 $e 来自用户输入(即一个表单)[...]

      不如按照他的建议使用 switch:

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

      【讨论】:

        猜你喜欢
        • 2014-05-05
        • 1970-01-01
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 2014-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多