请推荐一种智能,优雅的方式来编写这些重复的"if"语句

RGB*_*GBK 0 php formatting if-statement

我只知道我这样做的方式很糟糕:

<?php } elseif ( is_single()) { 

    $url = wp_get_referer();
    $path_parts = pathinfo($url);
    $mycat = $path_parts['filename'];

    if ( $mycat == "animation"  ) {
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "direction"){     
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "grading"){   
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "online"){    
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "showcase"){  
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "showreel"){  
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php } elseif ($mycat == "vfx"){   
        $_SESSION["theCategory"] = $mycat;?>
        <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php }else{ ?><a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a><?php };?>

<?php } //end if is_single ?>
Run Code Online (Sandbox Code Playgroud)

有用.但它是混乱和重复的.我尝试过这条路线:

<?php if ($mycat == "animation" || "direction" || "grading"){
Run Code Online (Sandbox Code Playgroud)

但它根本不起作用.

Bol*_*ock 7

创建一个包含值的数组,然后测试数组中是否$mycat存在值.此外,您正在回显链接$mycat,因此可以完全删除else语句,并将if结构进一步简化为以下内容:

$categories = array(
    'animation', 
    'direction', 
    'grading', 
    'online', 
    'showcase', 
    'showreel', 
    'vfx'
);

if (in_array($mycat, $categories)) {
    $_SESSION["theCategory"] = $mycat;
}

?>
<a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
Run Code Online (Sandbox Code Playgroud)

和其他人一样说,记得要逃避你的输出.


Mat*_*iva 5

像这样的东西?

<?php
$cats = array(
    'animation',
    'direction',
    'grading',
    'online',
    'showcase',
    'showreel'
    'vfx',
);
if ( in_array($mycat, $cats) ) :
    $_SESSION['theCategory'] = $mycat; ?>
    <a href="<?php bloginfo('home')?>/category/<?php echo $mycat;?>"><?php echo $mycat;?></a>
<?php else: ?>
    <a href="<?php bloginfo('home')?>/category/<?php echo $_SESSION["theCategory"];?>"><?php echo $_SESSION["theCategory"];?></a>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)