开关&案例多选

时间:2016-05-06 09:18:47

标签: php switch-statement

我遇到了开关问题。 现在从我的理解,它的工作原理如下:

if ( sizeof( $a ) !== sizeof( $types ) ) {
    $type = $a[ 0 ];
    switch ( $type ) {
        case 'Red' :
            $type = 'winered';
            break;
        case 'blue' :
            $type = 'royalblue';
            break;
        case 'yellow' :
            case 'lime' :
            break;
        case 'beige' :
            $type = 'bright';
            break;
        default :
            $type = get_option( 'my_option' );
            break;
    }
} else {
    $type = get_option( 'my_option' );
}

到目前为止一切顺利。无论我选择什么,它都显示了这种情况。 我的问题是,它只是一个接一个,我可以选择多个案例,如

case Red: case Blue:          
$type = 'winered';
break;

但这对我来说不起作用。在我的场景中,它是一个复选框,我得到了案例" Red" AND case" Blue"选择并希望同时显示"结果":" winered" AND" royalblue"。现在它又回到了皇室蓝。

有什么建议吗? 谢谢!

3 个答案:

答案 0 :(得分:1)

我不认为使用开关盒可以选择多个结果。我宁愿使用if语句:

*-util

答案 1 :(得分:0)

为什么它会回落到'royalblue'除了:

之前没有任何意义
  1. 'Red' != 'red',所以它永远不会真正进入第一个case
  2. 也许这就是$a中存储类型的方式,因此$a[0]实际上是'blue',我会检查一下。
  3. 无论如何,如果你对不同条件的组合感兴趣,我会认为'定期' if-then-else是要走的路。案例通常更快,但提供自己更简单的'条件句。

    我希望这有帮助!

答案 2 :(得分:0)

您的代码不完整。但是,我认为关键在于:

$type = $a[ 0 ];
switch ( $type ) {

您只检查$a的第一个值。您可以使用简单的foreach

检查其所有值
// Put the selected values here; will join them at the end to get a string
$selected = array();

if (count($a) != count($types)) {
    foreach ($a as $type) {
        switch ($type) {
        case 'Red':
            $selected[] = 'winered';
            break;
        case 'blue':
            $selected[] = 'royalblue';
            break;
        case 'yellow':
        case 'lime':
            // nothing here?!
            break;
        case 'beige':
            $selected[] = 'bright';
            break;
        default:
            $selected[] = get_option('my_option');
            break;
        }
    }
} else {
    $selected[] = get_option('my_option');
}

// Join the selected type with spaces
$type = implode(' ', $selected);