【问题标题】:Reduce if/else statements减少 if/else 语句
【发布时间】:2016-05-06 13:28:34
【问题描述】:

我写了一个非常简单的 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 shrink


【解决方案1】:

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

<?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"

【讨论】:

  • 很可能他在不同的情况下需要不同的href URL :)
  • 谢谢。我正在学习基本的atm,我不知道这意味着什么。 :p
【解决方案2】:

使用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;

}

【讨论】:

    【解决方案3】:

    您可以在 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>
    

    【讨论】:

    • 所有很棒的答案。我是 php 新手,所以这是一个巨大的帮助。谢谢!
    • 不客气 :) 如果解决方案解决了您的问题,请标记为已回答 :)
    • 我收到关于 bob 案例的语法错误
    • 那是因为 php 标签没有正确启动和结束。现在检查:)
    • 是的,我也发现了。 :p 谢谢!