【问题标题】:Store plus and minus in a variable PHP在变量 PHP 中存储加号和减号
【发布时间】:2011-07-20 20:57:34
【问题描述】:

我该如何解决这个问题:

if ($variable == 1) {
    $math = "-";
} else {
    $math = "+";
}

$numberOne = 10;
$numberTwo = 10;

$result = $numberOne $math $numberTwo;

这不行,有什么办法解决吗?

【问题讨论】:

  • 你不能只是将变量放在一行中,然后期望它们作为 PHP 表达式进行计算。
  • 类似于stackoverflow.com/questions/1015242/…。如果您计划支持其他操作,应该会有所帮助。
  • @Gazler 的答案有效,但是您在这里尝试做的事情表明对 PHP 如何解释语句存在一些误解(您假设它将连接三个变量的值,然后正确评估它们作为数学陈述)。关于为什么这不起作用,我们可以回答一个更基本的问题吗?

标签: php


【解决方案1】:

这将适用于您的示例。减法与加负数相同。这将比使用eval 的替代方法安全得多。

if ($variable == 1) {
    $modifier = -1;
} else {
    $modifier = 1;
}

$numberOne = 10;
$numberTwo = 10;

$result = $numberOne + ($numberTwo * $modifier);

【讨论】:

    【解决方案2】:

    我想你可以使用eval()——但这不是一个好主意(它不利于表演,它不“干净”,...)


    在这种情况下,我通常会在运算符上使用switch,并且每个可能的运算符都有一个案例。

    在这里,这意味着使用类似这样的东西:

    switch ($math) {
        case '+':
            $result = $numberOne + $numberTwo;
            break;
        case '-':
            $result = $numberOne - $numberTwo;
            break;
    }
    

    这可以很容易地扩展到其他运算符。


    (在您的特定情况下,如果您只有 +-,那么基于乘以 +1-1 的一些计算会更快编写)

    【讨论】:

      【解决方案3】:
      if ($variable == 1) {
          $math = -1; // subtraction
      } else {
          $math = 1; // addition
      }
      
      $numberOne = 10;
      $numberTwo = 10;
      
      $result = $numberOne + ($math * $numberTwo);
      

      【讨论】:

        【解决方案4】:

        不喜欢三元运算符?
        进一步缩小Gazler's answer

        $modifier = ($variable == 1) : -1 ? 1;
        
        $numberOne = 10;
        $numberTwo = 10;
        
        $result = $numberOne + ($numberTwo*$modifier);
        

        【讨论】:

        • 我认为大多数人会避免使用三元运算符来回答,除非提供的代码出于清晰的原因使用它。不过它绝对没有问题,如果我使用自己的解决方案,我会使用它。
        • 缩小地狱:$result = $numberOne + ($numberTwo * (($variable == 1) : -1 ? 1) );
        【解决方案5】:

        如果您打算使用更复杂的数学,可以使用eval() 函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-27
          • 2017-02-02
          • 2011-04-03
          • 2017-06-06
          • 2012-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多