将多个if放入交换机中

时间:2014-07-22 08:01:02

标签: php if-statement switch-statement

如果可能的话,我想把所有这些“if”条件用一个大开关。 这里是我的功能:

function checkModel($model){

$model_value = 'Default Model';

if (strpos($model,'TMP') !== false) {
    $model_value = 'TMP - Default';
}
if (strpos($model,'TMT') !== false) {
    $model_value = 'TMT - Default';
}
if (strpos($model,'TMS') !== false) {
    $model_value = 'TMS - Default';
}
if (strpos($model,'IcomSpeed') !== false) {
    $model_value = 'IcomSpeed - Default';
}
if (strpos($model,'TMSSA') !== false) {
    $model_value = 'TMSSA - Default';
}
if (strpos($model,'IcomsDisplay') !== false) {
    $model_value = 'IcomsDisplay - Default';
}   
if (strpos($model,'ITV') !== false) {
    $model_value = 'ITV - Default';
}   
if (strpos($model,'Terminal') !== false) {
    $model_value = 'Terminal - Default';
}   
if (strpos($model,'IcomsTexto') !== false) {
    $model_value = 'IcomsTexto - Default';
}   
if (strpos($model,'PIV') !== false) {
    $model_value = 'PIV - Default';
}   
if (strpos($model,'TM150') !== false) {
    $model_value = 'TM150 - Default';
}   
if (strpos($model,'TM60') !== false) {
    $model_value = 'TM60 - Default';
}

return ($model_value);
};

我真的不知道我怎么能这样做:/那就是为什么我要问你们^^

为什么我要这样:

带有一个开关的Bcz我可以直接用“break”退出,有了这个版本,程序会检查每个“if”条件,我认为-_-?

现在,如果您告诉我“if”版本比“switch”版本更快,那么请保留:p

3 个答案:

答案 0 :(得分:1)

Curly-brace / C语法语言(C,C ++,C#,Java,Perl,PHP)中的

switch不支持每个case语句中的复杂操作,因为传统上{{1} }语句被编译成哈希表,只允许立即比较,不允许中间操作。 PHP不是以这种方式编译的,但关于switch的语法规则仍然存在。

...简而言之,在这种情况下你不能使用switch,但是你可以通过将代码转换为使用关联数组然后迭代它来简化代码。

switch

答案 1 :(得分:1)

您无法在此使用switch

你能做的是:是:

if (strpos($model,'TMP') !== false) {
    return 'TMP - Default';
}

一旦满足条件,这将使其停止。

答案 2 :(得分:1)

如果您想了解开关的工作原理,请阅读this

但是看起来你只想稍微清理一下你的功能。虽然我不是专家,但我会这样做:

function checkModel( $model ) {
    $strings = array( 'TMP' , 'TMT' , 'TMS' , 'IcomSpeed' , 'TMSSA' , 'IcomsDisplay' , 'ITV' , 'Terminal' , 'IcomsTexto' , 'PIV' , 'TM150' , 'TM60');
    foreach( $strings as $s ) 
        if( strpos( $model , $s ) !== FALSE )
            return $s . " - Default";
    return "Default Model";
}

我没有尝试过运行此代码。