Я использую слишком много утверждений elseif?Есть ли лучший способ выполнить большие условия, как это? - PullRequest
0 голосов
/ 14 июня 2019

У меня довольно большое условное условие / elseif / else, и мне интересно, может ли это быть лучшим способом сделать это, или есть лучший способ?

if (($site == '1') && ($theAction == 'subscribe')) {
    $url = "https://test1.com/?na=ajaxsub";
} elseif (($site == '2') && ($theAction == 'subscribe')) {
    $url = "https://test2.com/?na=ajaxsub";
} elseif (($site == '3') && ($theAction == 'subscribe')) {
    $url = "https://test3.com/?na=ajaxsub";
} elseif (($site == '4') && ($theAction == 'subscribe')) {
    $url = "https://test4.com/?na=ajaxsub";
} elseif (($theAction == 'unsubscribe') && ($site == '1' | '2' | '3' | '4')) {
    $url = "https://test5.com/unsubscribe.php";
} else {
    return;
}

1 Ответ

1 голос
/ 14 июня 2019

Для начала кажется, что вы хотите перенаправить на одну и ту же страницу всякий раз, когда пользователь пытается отписаться, независимо от значения $site, поэтому вы можете полностью исключить эту часть изуравнение.

Здесь я бы порекомендовал создать ассоциативный массив, который отображает каждый индекс $site на соответствующий сайт.Затем вы можете просто установить $url на основе индекса этого нового вспомогательного массива следующим образом:

$site = 1; // Set the site as an integer
$theAction = 'subscribe'; // As long as it is not 'unsubscribe' the `else` will trigger

$mappings = array("1"=>"https://test1.com/?na=ajaxsub", 
                  "2"=>"https://test2.com/?na=ajaxsub", 
                  "3"=>"https://test3.com/?na=ajaxsub", 
                  "4"=>"https://test4.com/?na=ajaxsub");

if ($theAction == 'unsubscribe') {
  $url = "https://test5.com/unsubscribe.php";
}
else {
  $url = $mappings[$site];
}

echo $url; // https://test1.com/?na=ajaxsub

Это можно увидеть работающим здесь .

И вы можете даже сократить условное выражение, используя троичную форму, если пожелаете:

$theAction == 'unsubscribe' ? $url = "https://test5.com/unsubscribe.php" : $url = $mappings[$site];

Что можно увидеть работающим здесь .

...