Как избежать повторения if / elseif?

Я создаю небольшую статистику, но есть проблема ..
я имею рыба , установка , приманка а также линия информация из базы данных.

И я хочу проверить все возможные варианты с этой информацией.
Мой код выглядит так:

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

}

После этого мне нужно проверить, если рыба не установить и Рог не установить .. и так далее ..

Как я могу избежать этого повторения?

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

Другие решения

Пожалуйста, используйте код ниже. Когда вы проверяете, установлена ​​ли переменная в сеансе, а затем изменяете строку. Так что если какой-либо из сеансов установлен, то только он будет продолжаться.

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

}
1

По вопросам рекламы [email protected]