减少if/else语句


Reduce if/else statements

我写了一个非常简单的if语句来检查url。它非常好用,但有什么办法可以把它修剪一下吗?

    <?php if ($_SERVER['REQUEST_URI'] === "/jim.html") { ?>
    <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">Inman jim <i class="fa fa-angle-down"></i></a>
    <?php } elseif ($_SERVER['REQUEST_URI'] === "/bob.html") { ?>
    <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">bob <i class="fa fa-angle-down"></i></a>
    <?php } elseif ($_SERVER['REQUEST_URI'] === "/dereck.html") { ?>
    <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">dereck <i class="fa fa-angle-down"></i></a>
    <?php } elseif ($_SERVER['REQUEST_URI'] === "/maxamilamatronicus") { ?>
    <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">maxamilamatronicus <i class="fa fa-angle-down"></i></a>

它只是在下拉菜单的下拉菜单中显示正确的标题。

谢谢!

这里有一个更简单的代码,它给出了相同的结果:

<?php 
$menus = [
    '/jim.html'     => [ 'title' => 'Inman jim', 'href' => '#'],
    '/bob.html'     => [ 'title' => 'bob', 'href' => '#'],
    '/dereck.html'  => [ 'title' => 'dereck', 'href' => '#'],
    '/maxamilamatronicus' => [ 'title' => 'maxamilamatronicus', 'href' => '#']
];
$menu = ['title' => 'Unknown', 'href' => '#'];
if(isset($menus[$_SERVER['REQUEST_URI']]))
    $menu = $menus[$_SERVER['REQUEST_URI']];
?>
<a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="<?=$menu['href']?>">
    <?= $menu['title'] ?>
    <i class="fa fa-angle-down"></i>
</a>

请注意,如果$_SERVER['REQUEST_URI']不等于$menus数组中的任何键,则文本将为"Unknown"

使用Switch更可读、更易于维护:

switch ($_SERVER['REQUEST_URI']) {
    case "/jim.html" : ?>
                         <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">Inman jim <i class="fa fa-angle-down"></i></a><?php
                         break;
    case "/bob.html" : ?>
                         <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">bob <i class="fa fa-angle-down"></i></a><?php
                         break;
    case "/dereck.html" : ?>
                         <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">dereck <i class="fa fa-angle-down"></i></a><?php
                         break;
    case "/maxamilamatronicus" : ?>
                         <a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown" href="#">maxamilamatronicus <i class="fa fa-angle-down"></i></a><?php
                         break;
}

您可以在PHP中使用switch case。哪个更有效。请看下面的示例:http://www.w3schools.com/php/php_switch.asp

还要尽量在PHP之外保留像下面这样的项目。这样可以提高可读性和效率。

<a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown">

因此,更好的解决方案是:

<a class="btn btn-primary dropdown-toggle btn-gallery" data-toggle="dropdown"
   <?php switch ($_SERVER['REQUEST_URI']) {
        case "/jim.html" : ?>
                            href="#">Inman jim <?php
                             break;
        case "/bob.html" : ?>
                             href="#">bob <?php
                             break;
        case "/dereck.html" : ?>
                              href="#">dereck <?php
                             break;
        case "/maxamilamatronicus" : ?>
                             href="#">maxamilamatronicus <?php
                             break;
    }?>
<i class="fa fa-angle-down"></i></a>