我在尝试做这样的事情时相当新,我从来没有真正在php中使用数字。我确信,必须有一种更好,更有效的方法来做到这一点。
基本上,它检查输入,即0到28之间的任何值,然后根据它确定修改器。
我的脑袋现在有点油炸,这就是我想出来的。它有效,但它非常可怕。
function calc_modifier($input1) {
if ($input1 < 2) {
$modifier = 5;
} else if ($input1 < 4) {
$modifier = 4;
} else if ($input1 < 6) {
$modifier = 3;
} else if ($input1 < 8) {
$modifier = 2;
} else if ($input1 < 10) {
$modifier = 1;
} else if ($input1 < 12) {
$modifier = 0;
} else if ($input1 < 14) {
$modifier = 1;
} else if ($input1 < 16) {
$modifier = 2;
} else if ($input1 < 18) {
$modifier = 3;
} else if ($input1 < 20) {
$modifier = 4;
} else if ($input1 < 22) {
$modifier = 5;
} else if ($input1 < 24) {
$modifier = 6;
} else if ($input1 < 26) {
$modifier = 7;
} else if ($input1 < 28) {
$modifier = 8;
}
return $modifier;
}
答案 0 :(得分:4)
在完成这种简化的经验之后,很容易发现通用公式
abs(5 - floor($input1 / 2));
如果您需要限制/验证$input
严格属于[0; 28]
范围,则应单独进行。
答案 1 :(得分:0)
这将满足您的需求(注意它没有经过测试)。您可能希望在循环中进行严格比较,例如$input1 === $input_to_match
但我不了解您的数据类型。
function calc_modifier($input1)
{
$modifiers = get_modifiers();
foreach ($modifiers as $input_to_match => $modifier_to_return) {
if ($input1 == $input_to_match) {
return $modifier_to_return;
}
}
// return a default value, null or false etc
}
function get_modifiers()
{
return [
2 => 5,
4 => 4,
6 => 3,
8 => 2,
10 => 1,
12 => 0,
14 => 1,
16 => 2,
18 => 3,
20 => 4,
22 => 5,
24 => 6,
26 => 7,
28 => 8,
];
}
答案 2 :(得分:0)
您可以通过使用数据结构来减少繁琐的重复代码。在这种情况下,您可以尝试使用数组并使用foreach
循环遍历它:
function calc_modifier($input1) {
$mapper = array(
2 => 5,
4 => 4,
6 => 3,
8 => 2,
10 => 1,
12 => 0,
14 => 1,
16 => 2,
18 => 3,
20 => 4,
22 => 5,
24 => 6,
26 => 7,
28 => 8
);
$mapperValues = array_values($mapper);
foreach ($mapperValues as $key => $value) {
if ($input < $key) {
$modifier = $value;
}
}
return $modifier;
}
如果没有满足任何条件,还要确保有一个能够初始化$ modifier的全能。