我是否使用了太多elseif语句?有没有更好的方法来执行这样的大型条件?

时间:2019-06-13 21:24:52

标签: php conditional-statements

我有一个相当大的if / 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 个答案:

答案 0 :(得分:1)

对于初学者来说,似乎无论用户$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

可以在 here 上看到它。

如果愿意,您甚至可以使用三元条件缩减条件:

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

可以看到哪些在工作 here