PHP:切换检查多个变量的相同值

时间:2013-05-16 17:38:20

标签: php switch-statement

我设置Switch为多个地方选择字体系列。例如bodyparagraph。两者都有自己的选择下拉列表但相同的字体系列。意味着身体如arial,tahoma,verdana比段落也有相同的家族。

所以对于身体我已设置开关盒并且工作正常但是现在我想使用相同的字体系列用于段落。那么如何为两个不同的变量使用相同的开关盒?

$body = get_opt('body_fonts');
$para = get_opt('para_fonts');

switch ($body) {
    case 'Arial':
        $body_fonts = 'Arial, Helvetica, sans-serif';
        break;

    case 'Lucida':
        $body_fonts = '"Lucida Sans Unicode", "Lucida Grande", sans-serif';
        break;

    case 'Roboto':
        $body_fonts = '"Roboto", sans-serif;';
        break;

    case 'Tahoma':
        $body_fonts = 'Tahoma, Geneva, sans-serif';
        break;

    case 'Verdana':
        $body_fonts = 'Verdana, Geneva, sans-serif';
        break;

    default:
        $body_fonts = 'Arial, Helvetica, sans-serif';
        break;
}

3 个答案:

答案 0 :(得分:3)

您只需将代码包含在函数中:

function getfont($what) {
    switch ($what) {
        case 'Arial':
            $fonts = 'Arial, Helvetica, sans-serif';
            break;

        case 'Lucida':
            $fonts = '"Lucida Sans Unicode", "Lucida Grande", sans-serif';
            break;

        case 'Roboto':
            $fonts = '"Roboto", sans-serif;';
            break;

        case 'Tahoma':
            $fonts = 'Tahoma, Geneva, sans-serif';
            break;

        case 'Verdana':
            $fonts = 'Verdana, Geneva, sans-serif';
            break;

        default:
            $fonts = 'Arial, Helvetica, sans-serif';
            break;
    }
    return $fonts;
}

$body_fonts = getfont($body);
$para_fonts = getfont($para);

答案 1 :(得分:2)

更好的方法可能是制作地图。

$fontMap = array(
    'Arial'=>'Arial, Helvetica, sans-serif',
    'Lucida'=>'"Lucida Sans Unicode", "Lucida Grande", sans-serif',
    'Roboto'=> '"Roboto", sans-serif',
    'Tahoma'=>'Tahoma, Geneva, sans-serif',
    'Verdana'=>'Verdana, Geneva, sans-serif',
    'default'=>'Arial, Helvetica, sans-serif'
);

然后你可以做这样的事情

$bodyFonts = array_key_exists($body, $fontMap)?$fontMap[$body]:$fontMap["default"];
$paraFonts = array_key_exists($para, $fontMap)?$fontMap[$para]:$fontMap["default"];

答案 2 :(得分:1)

您可以使用带有变量变量的循环:

$elements = array($body, $para);

foreach($elements as $element) {
    switch ($element) {
        case 'Arial':
            ${$element .'_fonts'} = 'Arial, Helvetica, sans-serif';
            break;

        #other case statements here
    }
}
但是,我不确定这是一个非常好的方法。您可能希望将代码重构为更多函数。