-1

我正在设置 Switch 以选择多个地方的字体系列。例如 forbody和 for paragraph。两者都有自己的选择下拉列表,但字体系列相同。指体如arial、tahoma、verdana比段也有同族。

所以对于正文,我设置了 switch-case 并且工作正常,但比现在我想对段落使用相同的字体系列。那么如何对两个不同的变量使用相同的开关盒呢?

$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;
}
4

3 回答 3

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);
于 2013-05-16T17:45:45.027 回答
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"];
于 2013-05-16T17:48:21.267 回答
1

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

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

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

        #other case statements here
    }
}

不过,我不确定这是一个很好的方法。您可能希望将代码重构为更多功能。

于 2013-05-16T17:45:14.387 回答