【问题标题】:How to avoid if / elseif repetition?如何避免 if / elseif 重复?
【发布时间】:2015-11-07 09:32:38
【问题描述】:

我正在创建少量统计信息,但遇到了问题.. 我有来自数据库的 fishrigbaitline 信息。

我想用这些信息检查所有可能的变化。 我的代码如下所示:

if ((isset($_SESSION['fish_id'])) && (isset($_SESSION['rig_id'])) && (isset($_SESSION['bait_id'])) && (isset($_SESSION['line_id']))) {

   echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
   echo '<div class="list-notes"> <ul> <li class="name">';
   echo 'FISH , RIG , BAIT , LINE';
   echo '</li></ul></div>';

} elseif ((isset($_SESSION['fish_id'])) && (isset($_SESSION['rig_id'])) && (isset($_SESSION['bait_id'])) && (!isset($_SESSION['line_id']))) {

   echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
   echo '<div class="list-notes"> <ul> <li class="name">';
   echo 'FISH , RIG , BAIT , *LINE*';
   echo '</li></ul></div>';

} elseif ((isset($_SESSION['fish_id'])) && (isset($_SESSION['rig_id'])) && (!isset($_SESSION['bait_id'])) && (isset($_SESSION['line_id']))) {

   echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
   echo '<div class="list-notes"> <ul> <li class="name">';
   echo 'FISH , RIG , *BAIT* , LINE';
   echo '</li></ul></div>';

} elseif ((isset($_SESSION['fish_id'])) && (!isset($_SESSION['rig_id'])) && (isset($_SESSION['bait_id'])) && (isset($_SESSION['line_id']))) {

   echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
   echo '<div class="list-notes"> <ul> <li class="name">';
    echo 'FISH , *RIG* , BAIT , LINE';
   echo '</li></ul></div>';

} ((!isset($_SESSION['fish_id'])) && (isset($_SESSION['rig_id'])) && (isset($_SESSION['bait_id'])) && (isset($_SESSION['line_id']))) {

   echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
   echo '<div class="list-notes"> <ul> <li class="name">';
   echo '*FISH* , RIG , BAIT , LINE';
   echo '</li></ul></div>';

}

之后我需要检查是否fish没有设置和rig没有设置..等等..

如何避免这种重复?

【问题讨论】:

    标签: php if-statement repeat


    【解决方案1】:

    鱼、钓、饵、线似乎完全相互独立, 因此这些条件可以分别应用于其中的每一个。

    下面的代码使用了三元运算符?:,但它本质上与单个if-else构造相同:

    echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
    echo '<div class="list-notes"> <ul> <li class="name">';
    
    $items = array();
    $items[] = isset($_SESSION['fish_id']) ? 'FISH' : '*FISH*';
    $items[] = isset($_SESSION['rig_id']) ? 'RIG' : '*RIG*';
    $items[] = isset($_SESSION['bait_id']) ? 'BAIT' : '*BAIT*';
    $items[] = isset($_SESSION['line_id']) ? 'LINE' : '*LINE*';
    echo join(' , ', $items);
    
    echo '</li></ul></div>';
    

    或者你可以更通用地用一个循环来做(如果你有更多的项目是有意义的;如果有四个固定的项目是有意义的):

    echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
    echo '<div class="list-notes"> <ul> <li class="name">';
    
    $items = array();
    foreach(array('fish', 'rig', 'bait', 'line') as $name) {
        $id = $name . '_id';
        $nameUppercased = strtoupper($name);
        $items[] = isset($_SESSION[$id]) ? $nameUppercased : "*$nameUppercased*";
    }
    echo join(' , ', $items);
    
    echo '</li></ul></div>';
    

    【讨论】:

    • @SashantPardeshi,是的,这就是为什么有一个警告词(“如果它对四个固定项目有意义的话,可以争论”)。
    【解决方案2】:

    请使用以下代码。当您检查是否在会话中设置了变量然后修改字符串时。因此,如果设置了任何一个会话,那么只有它会继续。

    if ( (isset($_SESSION['fish_id']) ) 
         || (isset($_SESSION['rig_id']) ) 
         || (isset($_SESSION['bait_id']) ) 
         || (isset($_SESSION['line_id']) ) ) {
    
        $names = array();
        $names[] = isset($_SESSION['fish_id']) ? 'FISH' : '*FISH*';
        $names[] = isset($_SESSION['rig_id']) ? 'RIG' : '*RIG*';
        $names[] = isset($_SESSION['bait_id']) ? 'BAIT' : '*BAIT*';
        $names[] = isset($_SESSION['line_id']) ? 'LINE' : '*LINE*';
    
                        echo '<img class="img-responsive" src="../assets/img/choose_fish.png">';
                        echo '<div class="list-notes"> <ul> <li class="name">';
                        echo (string)implode(' , ', $names);
                        echo '</li></ul></div>';
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多