PHP 开关案例多次返回


PHP switch case multiple returns

我目前有 2 个开关案例,基本上使用相同的数据,但返回不同(一个开关案例返回图像 URL,而另一个返回数字),我认为这不是很好的做法(真的试图有效地编码),有没有机会将两个开关案例组合成一个开关案例?

他们在这里:

function getImage($image,$image_url,$count){
    switch ($image) {
        case 1:
            if($count == 1){
                return "images/menu_slider/960x200/".basename($image_url);
            }else if($count == 2){
                return "images/menu_slider/595x200/".basename($image_url);
            }else if($count == 6){
                return "images/menu_slider/480x200/".basename($image_url);
            }else{
                return "images/menu_slider/470x200/".basename($image_url);
            }
        break;
        case 2:
            if($count == 2){
                return "images/menu_slider/365x200/".basename($image_url);
            }else if($count == 3 || $count == 4  ||$count == 5  ||$count == 6   ){
                return "images/menu_slider/250x200/".basename($image_url);
            }else if ($count == 7){
                return "images/menu_slider/250x300/".basename($image_url);
            }else{
                return "images/menu_slider/250x400/".basename($image_url);
            }
        break;
        case 3:
            if($count == 3){
                return "images/menu_slider/240x200/".basename($image_url);
            }else{
                return "images/menu_slider/240x100/".basename($image_url);
            }
        break;
        case 4:
            return "images/menu_slider/240x100/".basename($image_url);
        break;
        case 5:
            if($count == 5){
                return "images/menu_slider/960x100/".basename($image_url);
            }else if($count == 6){
                return "images/menu_slider/480x100/".basename($image_url);
            }else if($count == 7){
                return "images/menu_slider/235x100/".basename($image_url);
            }else if($count == 8){
                return "images/menu_slider/235x200/".basename($image_url);
            }else{
                return "images/menu_slider/235x141/".basename($image_url);
            }
        break;
        case 6:
            if($count == 6){
                return "images/menu_slider/480x100/".basename($image_url);
            }else if($count == 7){
                return "images/menu_slider/235x100/".basename($image_url);
            }else if($count == 8){
                return "images/menu_slider/235x200/".basename($image_url);
            }else{
                return "images/menu_slider/235x141/".basename($image_url);
            }
        break;
        case 7:
            return "images/menu_slider/240x100/".basename($image_url);
        break;
        case 8:
            return "images/menu_slider/240x100/".basename($image_url);
        break;
        case 9:
            return "images/menu_slider/470x60/".basename($image_url);
        break;
    }
}
function getLinks($links,$count){
    switch ($links) {
        case 1:
            if($count == 1){
                //return "12 Links 4 Cols";
                return 12;
            }else{
                //return "12 Links 2 Cols";
                return 12;
            }
        break;
        case 2:
            if($count == 6){
                //return "6 Links";
                return 6;
            }else if($count == 7){
                //return "12 or 14 Links";
                return 12;
            }else{
                //return "12 Links";
                return 12;
            }
        break;
        case 3:
            if($count == 3){
                //return "6 Links";
                return 6;
            }else{
                //return "3 Links";
                return 3;
            }
        break;
        case 4:
            //return "3 Links";
            return 3;
        break;
        case 5:
            if($count == 5){
                //return "12 Links 4 col";
                return 12;
            }else if($count == 6){
                //return "6 Links 2 cols";
                return 6;
            }else if($count == 7){
                //return "3 Links";
                return 3;
            }else if($count == 8){
                //return "6 or 8 Links";
                return 6;
            }else{
                //return "4 Links";
                return 4;
            }
        break;
        case 6:
            if($count == 6){
                //return "6 Links 2 cols";
                return 6;
            }else if($count == 7){
                //return "3 Links";
                return 3;
            }else if($count == 8){
                //return "6 or 8 Links";
                return 8;
            }else{
                //return "4 Links";
                return 4;
            }
        break;
        case 7:
            //return "3 Links";
            return 3;
        break;
        case 8:
            //return "3 Links";
            return 3;
        break;
        case 9:
            //return "2 Links";
            return 2;
        break;
    }
}

他们被称为:

$linkCount = getLinks($counter,$count);
getImage($image,$image_url,$count);

我不知道我是否没有必要,但这对我来说似乎不合逻辑......

任何帮助非常感谢。

如果需要,以下是整个文件:

<?php
$image_url = "";
//Conditional Images
function getLinks($links,$count){
    switch ($links) {
        case 1:
            if($count == 1){
                //return "12 Links 4 Cols";
                return 12;
            }else{
                //return "12 Links 2 Cols";
                return 12;
            }
        break;
        case 2:
            if($count == 6){
                //return "6 Links";
                return 6;
            }else if($count == 7){
                //return "12 or 14 Links";
                return 12;
            }else{
                //return "12 Links";
                return 12;
            }
        break;
        case 3:
            if($count == 3){
                //return "6 Links";
                return 6;
            }else{
                //return "3 Links";
                return 3;
            }
        break;
        case 4:
            //return "3 Links";
            return 3;
        break;
        case 5:
            if($count == 5){
                //return "12 Links 4 col";
                return 12;
            }else if($count == 6){
                //return "6 Links 2 cols";
                return 6;
            }else if($count == 7){
                //return "3 Links";
                return 3;
            }else if($count == 8){
                //return "6 or 8 Links";
                return 6;
            }else{
                //return "4 Links";
                return 4;
            }
        break;
        case 6:
            if($count == 6){
                //return "6 Links 2 cols";
                return 6;
            }else if($count == 7){
                //return "3 Links";
                return 3;
            }else if($count == 8){
                //return "6 or 8 Links";
                return 8;
            }else{
                //return "4 Links";
                return 4;
            }
        break;
        case 7:
            //return "3 Links";
            return 3;
        break;
        case 8:
            //return "3 Links";
            return 3;
        break;
        case 9:
            //return "2 Links";
            return 2;
        break;
    }
}
function getImage($image,$image_url,$count){
    switch ($image) {
        case 1:
            if($count == 1){
                return "images/menu_slider/960x200/".basename($image_url);
            }else if($count == 2){
                return "images/menu_slider/595x200/".basename($image_url);
            }else if($count == 6){
                return "images/menu_slider/480x200/".basename($image_url);
            }else{
                return "images/menu_slider/470x200/".basename($image_url);
            }
        break;
        case 2:
            if($count == 2){
                return "images/menu_slider/365x200/".basename($image_url);
            }else if($count == 3 || $count == 4  ||$count == 5  ||$count == 6   ){
                return "images/menu_slider/250x200/".basename($image_url);
            }else if ($count == 7){
                return "images/menu_slider/250x300/".basename($image_url);
            }else{
                return "images/menu_slider/250x400/".basename($image_url);
            }
        break;
        case 3:
            if($count == 3){
                return "images/menu_slider/240x200/".basename($image_url);
            }else{
                return "images/menu_slider/240x100/".basename($image_url);
            }
        break;
        case 4:
            return "images/menu_slider/240x100/".basename($image_url);
        break;
        case 5:
            if($count == 5){
                return "images/menu_slider/960x100/".basename($image_url);
            }else if($count == 6){
                return "images/menu_slider/480x100/".basename($image_url);
            }else if($count == 7){
                return "images/menu_slider/235x100/".basename($image_url);
            }else if($count == 8){
                return "images/menu_slider/235x200/".basename($image_url);
            }else{
                return "images/menu_slider/235x141/".basename($image_url);
            }
        break;
        case 6:
            if($count == 6){
                return "images/menu_slider/480x100/".basename($image_url);
            }else if($count == 7){
                return "images/menu_slider/235x100/".basename($image_url);
            }else if($count == 8){
                return "images/menu_slider/235x200/".basename($image_url);
            }else{
                return "images/menu_slider/235x141/".basename($image_url);
            }
        break;
        case 7:
            return "images/menu_slider/240x100/".basename($image_url);
        break;
        case 8:
            return "images/menu_slider/240x100/".basename($image_url);
        break;
        case 9:
            return "images/menu_slider/470x60/".basename($image_url);
        break;
    }
}
?>
<?php
    $document = JFactory::getDocument();
    $style= array();
?>
<?php foreach ($menu as $item): ?>
<?php 
    if($item->theme_title){
        $class = $item->theme_title;
        $style[] = '.'.$class.' > .cover {
            color:'.$item->foreground_text_color.';
            overflow: visible !important;
        }';
        $style[] = '.'.$class.' > .slide-background {
            background:'.$item->background_color.';
            color:'.$item->background_text_color.';
        }';
        $style[] = '.'.$class.' > .slide-background > ul > li > a{
            color:'.$item->background_text_color.';
        }';
        $style[] = '.'.$class.' > .cover > span:before {
            color:'.$item->icon_color.';
        }';
    }
?>
<?php endforeach; ?>
<?php foreach ($style as $css): ?>
    <?php $document->addStyleDeclaration( $css ); ?>
<?php endforeach; ?>

<div id="grid-menu-slider" class="menu-slider">
<?php foreach (array_chunk($menu, 9) as $menu): ?>
<?php $counter = 0; ?>
<?php $count = count($menu); ?>
<div class="grid-box">
    <div class="item-<?php echo $count ?>">
    <?php foreach($menu as $items): ?>
        <?php $counter++; ?>
        <?php if ($items->menu_image) {
                $image = $counter;
                $image_url = $items->menu_image;
                $background = "url(" . $theImage = getImage($image,$image_url,$count) .") no-repeat";
                $shadow = 'shadow';
            } else {
                $shadow = NULL;
                $background = $items->foreground_color.';';
            }
            $class = $items->theme_title;
            ?>
             <?php $linkCount = getLinks($counter,$count); ?>
                <div class="slide<?php echo $items->slide_direction; ?> box-<?php echo $counter ?> <?php echo $class; ?>">
                    <div class="cover <?php echo $shadow; ?>" style="background:<?php echo $background ?>;">
                        <span class="<?php echo 'icon-'.$items->icon; ?> <?php echo $shadow; ?>"><?php echo $items->menu_title; ?></span>
                    </div>
                    <div class="slide-background">
                        <?php foreach (array_chunk($items->submenu, $linkCount) as $items): ?>
                        <ul>
                            <?php foreach($items as $submenu): ?>
                                <?php echo $submenu; ?>
                            <?php endforeach; ?>
                        </ul>
                        <?php endforeach; ?>
                    </div>
                </div>
    <?php endforeach; ?>
    </div>
</div>
<?php endforeach; ?>
</div>
<div class="clearfix"></div>
我不知道

如何让它变得更好,但我可以提出一个替代方案。

您可以简单地使用关联数组。例如:

$images[1][1] = "images/menu_slider/960x200/%s";
$images[1][2] = "images/menu_slider/595x200/%s";

等等...

然后,要访问$image为 1 和 $count 为 2 的图像,您只需执行以下操作:

$url = sprintf($images[$image][$count],basename($image_url));

希望这有帮助...

您可以创建一个函数来构建每个 url 字符串:

            if($count == 1){
                return build_url("960x200",basename($image_url));
            }else if($count == 2){
                return build_url("595x200",basename($image_url));
            }else if($count == 6){
                return build_url("480x200",basename($image_url));
            }else{
                return build_url("470x200",basename($image_url));
            }

您的职能 :

function build_url($size,$img_url)
{
   return strtr("images/menu_slider/{size}/{img_url}",array('{size}'=>$size,'img_url'=>$img_url));
}

这样,如果你将来需要重新制作你的 url 字符串,你将做一次,而不是重写每个 url。

你的代码有点混乱,太多的if/elseif/else使代码不可读。使用数组来管理它:

function getImage($image,$image_url,$count=null)
{
$imgArray=array(
1=>array(1=>'960x200',2=>'595x200',6=>'480x200','other'=>'470x200'),
2=>array(2=>'365x200',3=>'250x200',4=>'250x200',5=>'250x200',6=>'250x200',7=>'250x300','other'=>'250x400'),
3=>array(3=>'240x200','other'=>'240x100'),
4=>'240x100',
5=>array(5=>'960x100',6=>'480x100',7=>'235x100',8=>'235x200','other'=>'235x141'),
6=>array(6=>'480x100',7=>'235x100',8=>'235x200','other'=>'235x141'),
7=>'240x100',
8=>'240x100',
9=>'470x60'
);
if(!is_array($imgArray[$image]) && isset($imgArray[$image]))
$folder=$imgArray[$image];
elseif(isset($imgArray[$image]) && isset($imgArray[$image][$count]))
$folder=$imgArray[$image][$count];
elseif(isset($imgArray[$image]))
$folder=$imgArray[$image]['other'];
else
return false;
return "images/menu_slider/{$folder}/".basename($image_url);
}
function getLinks($links,$count=null){
$linkArray=array(
1=>12,
2=>array(6=>6,'other'=>12),
3=>array(3=>6,'other'=>3),
4=>3,
5=>array(5=>12,6=>6,7=>3,8=>6,'other'=>4),
6=>array(6=>6,7=>3,8=>8,'other'=>4),
7=>3,
9=>3,
9=>2
);
if(!is_array($linkArray[$links]) && isset($linkArray[$links]))
return $linkArray[$links];
elseif(isset($linkArray[$links]) && isset($linkArray[$links][$count]))
return $linkArray[$links][$count];
elseif(isset($linkArray[$links]))
return $linkArray[$links]['other'];
return false;
}