如何避免if / elseif重复?

时间:2015-11-07 09:32:39

标签: php if-statement repeat

我创建了很少的统计数据,但遇到了问题.. 我有来自数据库的 fish rig 诱饵信息。

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

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>';

}

之后我需要检查鱼是否设置并且装备不是设置..等等..

我怎样才能避免这种重复?

2 个答案:

答案 0 :(得分:4)

鱼,钻机,鱼饵,钓鱼线似乎完全相互独立, 所以条件可以单独应用于这些条件中的每一个。

下面的代码使用三元运算符?:,但它基本上与单个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>';

答案 1 :(得分:1)

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

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>';

}