如何避免 if / elseif 重复?
How to avoid if / elseif repetition?
我创建的统计数据很少,但遇到了问题..
我有 fish , rig , bait 和 line 信息来自数据库。
我想用这些信息检查每一个可能的变化。
我的代码如下所示:
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 是否未 设置..等等..
如何避免这种重复?
鱼、钓组、鱼饵、线似乎完全独立,
因此,这些条件可以分别适用于其中的每一个。
下面的代码使用了三元运算符 ?:
,但它本质上与单个 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>';
请使用以下代码。当您检查会话中是否设置了变量然后修改字符串时。因此,如果设置了任何一个会话,那么它只会继续。
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>';
}
我创建的统计数据很少,但遇到了问题.. 我有 fish , rig , bait 和 line 信息来自数据库。
我想用这些信息检查每一个可能的变化。 我的代码如下所示:
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 是否未 设置..等等..
如何避免这种重复?
鱼、钓组、鱼饵、线似乎完全独立, 因此,这些条件可以分别适用于其中的每一个。
下面的代码使用了三元运算符 ?:
,但它本质上与单个 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>';
请使用以下代码。当您检查会话中是否设置了变量然后修改字符串时。因此,如果设置了任何一个会话,那么它只会继续。
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>';
}