Php 如何切换数学运算符并将计算存储在循环中?

Php 如何切换数学运算符并将计算存储在循环中?,php,loops,math,toggle,formula,Php,Loops,Math,Toggle,Formula,我需要在循环中执行一个计算,在此循环中,每隔一次迭代都应该将+更改为-,反之亦然 $mainNumber = 6; $finalData = []; $operator = '+'; for ($i = 1; $i <= $mainNumber; $i++) { switch ($operator) { case '-': $operator = '+'; break; case '+':

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

$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 => "5"
  1 => "8"
  2 => "3"
  3 => "10"
  4 => "1"
  5 => "12"
]

只需在循环中执行计算,而不是创建字符串(然后需要对其进行
求值):

$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);

我发现开关块非常冗长。你可以用数学来做一行

如果
$i
为奇数,则将其设置为等式中的负因子。换句话说,您总是向
$mainNumber
添加一个正值或负值
$i

代码:()

补充说明:

当您需要多次评估同一条件并对照可预测的静态奇异值检查结果时,开关块最有价值。这种情况只需要检查操作符是加号还是减号——换句话说,如果不是。在这里实现切换案例没有任何价值


使用
eval()。您想要的输出是
6-1
还是
5
$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
 )
$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,
)