2014-03-06 2 views
3

다음은 제 코드입니다. 스위치가 숫자 비교와 함께 작동하지 않습니다.

$value = 0; 
switch($value) { 
     case ($value <= 25): 
      $CompScore = 'low'; 
      break; 
     case ($value > 25 && $value <= 50): 
      $CompScore = 'fair'; 
      break; 
     case ($value > 50 && $value <= 75): 
      $CompScore = 'good'; 
      break; 
     case ($value >75): 
      $CompScore = 'excellent'; 
      break; 
     default: 
      $CompScore = 'low'; 
      break; 
} 

echo $CompScore; 

0이다

, $compScorefair이다. 왜 low이 보이지 않습니까? 나는 왜 그런지 이해하지 못한다.

답변

0

switch 문에 전달하는 값은 기본적으로 switch 문이 평가 된 일치 항목을 찾는 것이며, 일치하는 항목이 발견 될 때까지 위에서 아래로 이동하여 과 같습니다. (느슨한 비교), 예 true == true. 하여 예에서

는 해당 comparisons은 부울 (true 또는 false)으로 평가 - 네 변수 $valuefalse에 동일 제로로 설정 아니지만 동일 (엄격한 비교)에 false된다. 예를 들어 :

(0 == false) // true 
(0 === false) // false 
(1 == false) // false 
(1 === false) // false 
(1 == true)  // true 
(1 === true) // false 
(true === true) // true 

그래서 스위치 값으로 부울 true를 사용하여 사용자가 일치하지/일치하도록 각 비교 중 하나 true 또는 false로 평가합니다 문, 내부 숫자 비교을 가지고이 작업을 수행 할 수 있습니다 원래 true 값 (부울 - 부울 비교).

switch(true) { 
     case ($value <= 25):     // true 
      $CompScore = 'low'; 
      break; 
     case ($value > 25 && $value <= 50): // false 
      $CompScore = 'fair'; 
      break; 
     case ($value > 50 && $value <= 75): // false 
      $CompScore = 'good'; 
      break; 
     case ($value >75):     // false 
      $CompScore = 'excellent'; 
      break; 
     default:        // if you removed the first case 
      $CompScore = 'low';   // this default case would be used 
      break;       
} 
+0

"왜 낮게 보이지 않는가?" –

+0

예제가 낮게 표시됩니다. 왜 이것이 내려 졌나요? 합리적인 경우 삭제합니다. –

+0

원본 코드에서 작동하지 않는 이유를 설명하지 않았습니다. –

2

switch 그런 식으로 작동하지 않습니다.

$value이 위자료 인 0이기 때문에.

$value <= 25$value > 25 && $value <= 50false입니다 true, 그래서 $CompScore'fair' 될 것입니다.

코드의 경우 if elseif else 흐름을 더 쉽게 읽을 수 있습니다.

아래처럼 코드를 다시 작성할 수 :

// from excellent to low 
if ($value > 75) { 
    $CompScore = 'excellent'; 
} else if ($value > 50) { 
    $CompScore = 'good'; 
} else if ($value > 25) { 
    $CompScore = 'fair'; 
} else { 
    $CompScore = 'low'; 
} 
1

문제는, 당신은 특정 방식으로 스위치를 사용하십시오.

당신이 말하는 : 아래에 설명 된대로

$value = 0; 
Switch ($value){ 
    case ($value < 25): 
     .... 

} 

을이 마침내 $ 값을 < 25과 0을 비교 : 잘못

($value<25) == $value. 
=> true == 0 

true != 0

있는 방법 무엇을 할 수 있기 때문에 이 방법을 원한다면 switch($value)switch(true)으로 대체하기 만하면 통역사는 실제로 yo ur case 문은 true입니다.

관련 문제