根据另一个数字计算一个数字

时间:2018-04-10 01:27:44

标签: php

我在尝试做这样的事情时相当新,我从来没有真正在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;
}

3 个答案:

答案 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的全能。