我遇到了开关问题。 现在从我的理解,它的工作原理如下:
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"。现在它又回到了皇室蓝。
有什么建议吗? 谢谢!
答案 0 :(得分:1)
我不认为使用开关盒可以选择多个结果。我宁愿使用if语句:
*-util
答案 1 :(得分:0)
为什么它会回落到'royalblue'
除了:
'Red' != 'red'
,所以它永远不会真正进入第一个case
$a
中存储类型的方式,因此$a[0]
实际上是'blue'
,我会检查一下。无论如何,如果你对不同条件的组合感兴趣,我会认为'定期' 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);