【问题标题】:How to toggle mathematical operator and store calculations in a loop?如何切换数学运算符并将计算存储在循环中?
【发布时间】:2019-03-23 01:42:15
【问题描述】:

我需要在一个循环中执行计算,从而每隔一次迭代都应该将+ 更改为-,反之亦然。

$mainNumber = 6;
$finalData = [];
$operator = '+';
for ($i = 1; $i <= $mainNumber; $i++) {
    switch ($operator) {
        case '-':
            $operator = '+';
            break;

        case '+':
            $operator = '-';
            break;
    }
    $finalData[] = "$mainNumber $operator $i";
}
dd($finalData);

我上面的代码输出如下

array:5 [▼
  0 => "6 - 1"
  1 => "6 + 2"
  2 => "6 - 3"
  3 => "6 + 4"
  4 => "6 - 5"
  5 => "6 + 6"
]

相反

array:5 [▼
  0 => "5"
  1 => "8"
  2 => "3"
  3 => "10"
  4 => "1"
  5 => "12"
]

【问题讨论】:

  • 不完全确定我理解了。你的 desired 输出是 6-15?

标签: php loops math toggle formula


【解决方案1】:

而不是创建一个字符串(然后你需要eval),只需在你的循环中执行计算:

$mainNumber = 6;
$finalData = [];
$operator = '-';
for ($i = 1; $i <= $mainNumber; $i++) {
    switch ($operator) {
        case '-':
            $finalData[] = $mainNumber - $i;
            $operator = '+';
            break;
        case '+':
            $finalData[] = $mainNumber + $i;
            $operator = '-';
            break;
    }
}
print_r($finalData);

输出:

Array ( 
    [0] => 5
    [1] => 8
    [2] => 3
    [3] => 10 
    [4] => 1 
    [5] => 12
 )

Demo on 3v4l.org

【讨论】:

    【解决方案2】:

    我发现开关块非常冗长。您可以在单行中使用数学。

    如果$i 是奇数,则将其设置为方程中的负因子。换句话说,您始终将$i 的正值或负值添加到$mainNumber

    代码:(Demo)

    $mainNumber = 6;
    $finalData = [];
    for ($i = 1; $i <= $mainNumber; ++$i) {
        $finalData[] = $mainNumber + (($i & 1 ? -1 : 1) * $i);
    }
    var_export($finalData);
    

    输出:

    array (
      0 => 5,
      1 => 8,
      2 => 3,
      3 => 10,
      4 => 1,
      5 => 12,
    )
    

    补充说明:

    当您需要多次评估同一条件并根据可预测的静态奇异值检查结果时,切换块最有价值。这种情况只需要检查运算符是加号还是减号——也就是if-else。在这里实现 switch case 没有任何价值。

    使用eval() 与此问题中的可信赖值一起使用可能是安全的,但是当涉及到用户提供的数据时,eval() 会长出喇叭并发出干草叉——几乎所有专业开发人员的一般建议是避免函数调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2020-02-07
      • 2011-06-17
      • 2014-12-24
      • 1970-01-01
      • 2023-03-17
      • 2021-09-09
      相关资源
      最近更新 更多