如何在循环中切换数学运算符和存储计算?
How to toggle mathematical operator and store calculations in a loop?
我需要在循环中执行计算,每隔一次迭代应将 +
更改为 -
,反之亦然。
$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"
]
与其创建字符串(然后您需要 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
)
我发现开关块非常冗长。您可以只在一行中使用数学。
如果$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()
长角和干草叉 - 来自的一般建议几乎所有的专业开发人员都是为了避免函数调用。
我需要在循环中执行计算,每隔一次迭代应将 +
更改为 -
,反之亦然。
$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"
]
与其创建字符串(然后您需要 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
)
我发现开关块非常冗长。您可以只在一行中使用数学。
如果$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()
长角和干草叉 - 来自的一般建议几乎所有的专业开发人员都是为了避免函数调用。