我只想弄清楚从长远来看哪个更好,以及这两种情况之间是否存在性能差异。
我们正在维护一个我们不创建的网站,我们正在尝试动态地向某些页面上的侧边栏添加内容,并尝试确定是否有理由使用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语句有点多余,但想知道是否有任何理由使用一种方式而不是另一种方式,即使它只是“如果你是下一个,你宁愿接管哪个代码双手放在这个项目上“如果这是唯一的原因。
完全接受新想法!
答案 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 ;