任何简化此代码的方法都会更高效


Any way to simplify this code, more efficient?

有什么方法可以简化这段代码吗?"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触发器。

由于我不知道那是什么语言,我会让它与语言无关:

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

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

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;

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

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

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

使用计算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]