基于多变量设置期权价值

时间:2014-06-26 13:46:23

标签: php logic

这是独家新闻。我正在制作一个有5个不同选项的产品计算器,但我需要应用于初始变量的值取决于两个单独的变量来确定要乘以的正确值。

逻辑上,我有值A,我需要乘以变量B,但是,B的值取决于变量C和D的输入。值B是绝对值。为了增加伤害,如果值A小于12,我需要减去.5或.25,取决于应用B之前原始值的变量C的值。我迷失在这里。

这是excel电子表格中的原始等式,我给了她适应:

= IF(AND(B9 = “Option_1”,B11 = “水平”),D6 + K6 + 1-0.00515464 *(D6 + K6),IF(AND(B9 = “Option_1”,B11 = “垂直” ),D6 + K6 + 1-0.0064433 *(D6 + K6),IF(AND(B9 = “Option_2”,B11 = “水平”,D6> 12),D6 + K6-0.5 + 1-0.010417 *(D6 + K6),IF(AND(B9 = “Option_2”,B11 = “垂直”,D6> 12),D6 + K6-0.25 + 1-0.005208 *(D6 + K6),IF(AND(B9 = “Option_2”, B11 = “水平”,D6< 12),D6 + K6-0.25 + 1-0.010417 *(D6 + K6),IF(AND(B9 = “Option_2”,B11 = “垂直”,D6< 12),D6 + K6 + 1-0.005208 *(D6 + K6),IF(AND(B9 = “Option_3”,B11 = “垂直”,D6> 12),D6 + K6-0.5 + 1-0.010417 *(D6 + K6),IF (AND(B9 = “Option_3”,B11 = “水平”,D6> 12),D6 + K6-0.25 + 1-0.005208 *(D6 + K6),IF(AND(B9 = “Option_3”,B11 =“垂直”,D6< 12),D6 + K6-0.25 + 1-0.010417 *(D6 + K6),IF(AND(B9 = “Option_3”,B11 = “水平”,D6< 12),D6 + K6 + 1- 0.005208 *(D6 + K6),IF(AND(B9 = “Option_4”,B11 = “垂直”),D6 + K6 + 1-0.03125 *(D6 + K6),IF(AND(B9 = “Option_4”,B11 = “水平”),D6 + K6 + 1-0.02083 *(D6 + K6),IF(AND(B9 = “Option_5”,B11 = “垂直”),D6 + K6 + 1-0.0625 *(D6 + K6) ,IF(AND(B9 = “Option_5”,B11 = “水平”),D6 + K6 + 1-0.052083 *(D6 + K6)))))))))))))))

谢谢!

1 个答案:

答案 0 :(得分:2)

这个问题的答案应该提供一些关于如何从你提供的代码中获得的指导(一长串电子表格三元IF函数很难理解)在PHP中更简洁,可能稍微更具可读性的东西。

我不知道我是否已经足够好地解释了这种真正帮助你的事情,但我认为最重要的步骤是:

重新格式化代码

将每个条件放在它自己的一行上,并且每个结果输出块都在它自己的一行上,这对于理解你所拥有的逻辑非常有帮助。这通常意味着您可以在查看代码时看到模式。

分组共同逻辑

一旦代码格式化得很好,并且您可能会看到一些模式出现,您应该能够将语句分组为更少的块。


我自己对您提供的代码采取了这些步骤,此函数应为D6K6B9B11的给定值提供相同的输出你进入了电子表格;

function calculateValue($D6, $K6, $B9, $B11) {
    $modifiers = array(
        'Option_1' => array('Horizontal' => 0.00515464, 'Vertical' => 0.0064433),
        'Option_2' => array('Horizontal' => 0.010417, 'Vertical' => 0.005208),
        'Option_3' => array('Horizontal' => 0.005208, 'Vertical' => 0.010417),
        'Option_4' => array('Horizontal' => 0.02083, 'Vertical' => 0.03125),
        'Option_5' => array('Horizontal' => 0.052083, 'Vertical' => 0.0625),
    );
    $x = $D6 + $K6;
    $y = $modifiers[$B9][$B11];
    $sub = 0;
    if ($B9 == "Option_2") {
        if ($B11 == "Horizontal") {
            $sub += 0.25;
        }
        if ($D6 > 12) {
            $sub += 0.25;
        }
    } else if ($B9 == "Option_3") {
        if ($B11 == "Vertical") {
            $sub += 0.25;
        }
        if ($D6 > 12) {
            $sub += 0.25;
        }
    }
    return $x - $sub + 1 - $y * $x;
}

希望这会使逻辑看起来更具可读性和可理解性。