2014-01-21 3 views
1

장기적으로 어떤 점이 더 좋고, 두 시나리오간에 성능 차이가 있는지 파악하려고합니다.여러 개의 if/else 문과 foreach 루프

우리는 이 아니고이라는 사이트를 만들고 있으며, 특정 페이지의 사이드 바에 동적으로 뭔가를 추가하려고합니다. foreach 루프 나 여러 if/else 문.

페이지가 여기에 표시된 것보다페이지가 많으므로 성능이 우려 될 수 있습니다.

은 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와 약간의 중복이 있다면,하지만 궁금 다른 통해 하나의 방법을 사용하는 어떤 이유가 있다면, 비록 그것이 유일한 이유라면 그것은 "당신이이 프로젝트에 손을 든 다음 사람이라면 당신이 차용 할 수있는 코드"일지라도.

전적으로 새로운 아이디어를 열어 라! 당신이 묻는 것을

답변

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 배열의 크기가 증가함에 따라 저하되지 않습니다. (적어도 많은 이유가 있습니다. 많은 메모리를 차지하는 거대한 배열이있는 경우 문제가 될 수 있습니다.)

+0

+1 coz 당신이 저를 때려 눕히십시오. –

+0

나는 최종 배열이 이성 안에서도 잘 될 것이라고 믿습니다. 그래서 저는 이것을 사용하려고합니다. 감사합니다. – Xhynk

2

당신이 switch/case 구문을 사용한다 :

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

    .... 
} 
+0

적용 할 수있는 잘 정의 된 휴리스틱/맵이 없을 때 * 고정 세트 *와 같은 경우에 대비하여/스위치를 선호합니다. (몇 가지 특수한 경우, 즉 추가 작업을 수행하는 경우 별도로 처리 할 것입니다.) – user2864740

+0

나는 이것을 고려했지만 if/else 문보다 코드가 더 많으며 여전히 순환시켜야합니다. 나쁜 제안은 아니지만, if/else와 대략 비슷합니다. +1,하지만 나는 다른 사람에게 이것을 사용하는 방법을 [array_key_exists()] (http://www.php.net/array_key_exists)를 사용하여 오는 방법을 추천 할 것입니다 :) – Xhynk

0

한 줄 :

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