开关盒与如果..其他(具体任务)

时间:2016-05-24 10:40:56

标签: php if-statement switch-statement

我有3个可以设置的数组。他们的钥匙是字符串。

这个If ... Else

会更有效率吗?
if( isset( $arrayA[ $id ] ) )
{
    if( isset( $arrayB[ $id ] ) )
    {
        if( isset( $arrayC[ $id ] ) )
        {
        }
        else
        {
        }
    }
    else
    {
        if( isset( $arrayC[ $id ] ) )
        {
        }
        else
        {
        }
    }
}
else
{
    if( isset( $arrayB[ $id ] ) )
    {
        if( isset( $arrayC[ $id ] ) )
        {
        }
        else
        {
        }
    }
    else
    {
        if( isset( $arrayC[ $id ] ) )
        {
        }
    }
}

或Switch ......像这样的案例?

$ABC = ( isset( $arrayA[ $id ] ) ? "1" : "0" ) . ( isset( $arrayB[ $id ] ) ? "1" : "0" ) . ( isset( $arrayC[ $id ] ) ? "1" : "0" );

switch( $ABC )
{
    case "001":
    case "010":
    case "011":
    case "100":
    case "101":
    case "110":
    case "111":
}

请注意" 000"案件永远不会出现在我的剧本中。

假设我知道组合'频率。 更频繁 - > " 110" " 111" " 010" " 100"," 101"," 001" " 011" < - 不太频繁

无论如何" 110"和" 111"几乎总是发生。 " 010"可能每10 ^ 4次发生1次或累计发生10 ^ 5次" 110" +" 111"。

这会不会......其他更好的解决方案?

if( isset( $arrayA[ $id ] ) and isset( $arrayB[ $id ] ) )
{
        if( isset( $arrayC[ $id ] ) )
        {
        }
        else
        {
        }
}
else
{
    $ABC = ( isset( $arrayA[ $id ] ) ? "1" : "0" ) . ( isset( $arrayB[ $id ] ) ? "1" : "0" ) . ( isset( $arrayC[ $id ] ) ? "1" : "0" );

    switch( $ABC )
    {
        case "001":
        case "010":
        case "011":
        case "100":
        case "101":
    }
}

2 个答案:

答案 0 :(得分:0)

转到switch。在这种情况下,它更具可读性,您可以比部署的if-else系列更轻松地跟踪输出。你想要的最后一件事是让你和其他任何人在你的代码上工作,与不必要的复杂性的帮助混淆。保持简单。

答案 1 :(得分:0)

关于执行时间,使用单个switch语句的解决方案更可取,因为它不需要进行3次比较即可到达"对"方法。 switch语句的层次结构并不重要,但我想对于这种简单的计算,如果只使用switch或组合开关,差异就不会很大。

您可以使用最后一种方法计算最佳案例方案的操作时间。无论如何,只使用switch语句会在所有三种情况下产生完全相同的计算复杂度