多个if / else语句与foreach循环

时间:2014-01-21 22:28:11

标签: php if-statement foreach

我只想弄清楚从长远来看哪个更好,以及这两种情况之间是否存在性能差异。

我们正在维护一个我们创建的网站,我们正在尝试动态地向某些页面上的侧边栏添加内容,并尝试确定是否有理由使用foreach循环或多个if / else语句。

我们最终将使用 更多的页面,而不是此处显示的6页,因此性能可能会被视为一个问题。

foreach循环如下所示:

$rb_enabled = false;

$RURLs = array(
    '/cambridge.php' => 'cambridge',
    '/milton.php' => 'milton',
    '/kitchener_waterloo.php' => 'kw',
    '/hamilton_dundas.php' => 'hd',
    '/oakville.php' => 'oakville',
    '/brantford.php' => 'brantford'
);

foreach( $RURLs as $rurl => $engine_location ){
    if($_SERVER['REQUEST_URI'] == $ru){
        $rb_url == $engine_location;
        $rb_enabled == true;
    } 
}

if($rb_enabled === true){ //create a div with information based on engine location }

这个加载的侧边栏php文件在很多页面上,其中一些需要专门为它创建的div,其他页面根本不需要它,因此$rb_enabled

有没有理由说foreach循环比这更好或更差:

if($_SERVER['REQUEST_URI'] == '/cambridge.php'){ $rb_url = 'cambridge'; $rb_enabled = true; }
else if($_SERVER['REQUEST_URI'] == '/milton.php'){ $rb_url = 'milton'; $rb_enabled = true; }
else if($_SERVER['REQUEST_URI'] == '/kitchener_waterloo.php'){ $rb_url = 'kw'; $rb_enabled = true; }
else if($_SERVER['REQUEST_URI'] == '/hamilton_dundas.php'){ $rb_url = 'hd'; $rb_enabled = true; }
else if($_SERVER['REQUEST_URI'] == '/oakville.php'){ $rb_url = 'oakville'; $rb_enabled = true; }
else if($_SERVER['REQUEST_URI'] == '/brantford.php'){ $rb_url = 'brantford'; $rb_enabled = true; }

$rb_enabled的if语句有点多余,但想知道是否有任何理由使用一种方式而不是另一种方式,即使它只是“如果你是下一个,你宁愿接管哪个代码双手放在这个项目上“如果这是唯一的原因。

完全接受新想法!

3 个答案:

答案 0 :(得分:5)

您已经有一个以URI为关键字的数组,为什么不使用array_key_exists()

if(array_key_exists($_SERVER['REQUEST_URI'], $RURLS)) {
    $rb_enabled = true;
    $rb_url = $RURLS[$_SERVER['REQUEST_URI']];
}

无需遍历数组,或提供多个if或switch / case语句。随着URI数组大小的增加,此查找的性能不会降低(至少在合理范围内 - 如果你有一个占用大量内存的巨大数组,那可能会有问题。)

答案 1 :(得分:2)

您应该使用switch/case语法来满足您的要求:

switch( $_SERVER['REQUEST_URI'] ) {
    case '/milton.php':
       $rb_url = 'milton';
       $rb_enabled = true;
       break;

    ....
}

答案 2 :(得分:0)

一行:

list($rb_enabled,$rb_url) = ($url=$RURLs[$_SERVER['REQUEST_URI']])? array(true,$url) : null ;