我需要在一个循环中执行计算,所有其他迭代都应将+
更改为-
,反之亦然。
$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"
]
答案 0 :(得分:3)
只需要在循环中执行计算即可,而不是创建一个字符串(然后需要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
)
答案 1 :(得分:1)
我发现开关组太冗长了。您可以单行使用数学。
如果$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。在这里实现切换案例没有任何价值。
在这个问题中,将eval()
与值得信赖的值一起使用可能是安全的,但是当涉及到用户提供的数据时,eval()
会变得很忙,并且会car起干草叉-几乎所有人的普遍建议专业的开发人员应避免调用函数。