任何简化此代码的方法,效率更高?

时间:2012-01-17 22:53:08

标签: php language-agnostic

有没有办法简化这段代码? “elseif”语句似乎没有起作用,导致我的应用程序抛出错误。

if(@@Employee_Position=="Manager") {

    if(@@CER_BioMed == "Y" && @@CER_PO == "Y")
        @%ISINDEX=5;
    elseif(@@CER_BioMed == "Y" && @@CER_PO != "Y")
        @%ISINDEX=4;
    elseif(@@CER_BioMed != "Y" && @@CER_PO == "Y")
        @%ISINDEX=4;
    else
        @%ISINDEX=3;
    }
else {
    if(@@CER_BioMed == "Y" && @@CER_PO == "Y")
        @%ISINDEX=6;
    elseif(@@CER_BioMed == "Y" && @@CER_PO != "Y")
        @%ISINDEX=5;
    elseif(@@CER_BioMed != "Y" && @@CER_PO == "Y")
        @%ISINDEX=5;
    else
        @%ISINDEX=4;
}

更新:抱歉不清楚。第一次在这里发帖它是用PHP语言编写的。它是Processmaker BPS的php触发器。

4 个答案:

答案 0 :(得分:5)

因为我不知道那是什么语言,所以我会保持语言不可知:

isindex = 3;
if (employee_position != 'manager') {
    isindex++;
}
if (cer_biomed == 'y') {
    isindex++;
}
if (cer_po == 'y') {
    isindex++;
}

答案 1 :(得分:0)

我不知道这是什么语言,但是:

elseif(@@CER_BioMed == "Y" && @@CER_PO != "Y")
              @%ISINDEX=4;    // or 5
           elseif(@@CER_BioMed != "Y" && @@CER_PO == "Y")
              @%ISINDEX=4;    // or 5

似乎是OR的明显案例:

elseif(@@CER_BioMed == "Y" || @@CER_PO == "Y")
              @%ISINDEX=4;    // or 5

答案 2 :(得分:0)

嗯,根据给出的内容,我会选择这样的东西:

if(@@CER_BioMed == "Y" && @@CER_PO == "Y")
    @%ISINDEX=5;
elseif(@@CER_BioMed != "Y" XOR @@CER_PO != "Y")
    @%ISINDEX=4;
else
    @%ISINDEX=3;

if(@@Employee_Position=="Manager")
    @%ISINDEX-=1;

假设这种语言支持-=运算符。

答案 3 :(得分:0)

使用

计算0到7之间的数字
lookup_table_index = (
    ((@@Employee_Position=="Manager") << 2)
     | ((@@CER_BioMed == "Y") << 1)
     | (@@CER_PO == "Y"))

然后将其用作长度为8的数组的索引,其值为@%INDEX。

lookup_table = [4, 5, 5, 6, 3, 4, 4, 5]

然后你可以计算你的指数

 INDEX = lookup_table[lookup_table_index]