2011-11-12 4 views
0

왜 내 함수가 항상 false를 반환합니까? 내가 문제가는 isset 기능에 의해 발생합니다 생각하지만 난 정말이 줄은 문제가왜 내 함수가 항상 false를 반환합니까?

$big = array(
2,3,5,7,11,13,17,19,23 
,29,31,37); 

$fbig = array_flip ($big); 


function isprime($n){ 
    if($n < 2){ 
     return FALSE; 
    } 
    if($n > 2147483647){ 
     return FALSE; 
    } 
    if($n < 46341){ 
     if(isset($fbig[$n])){ 


      return TRUE; 
     } else { 
      return FALSE; 
     } 
    } 
} 

$b = 11; 
if(isprime($b)){echo "lol";} 
+1

함수에서'$ fbig'는 어디에 있습니까? –

답변

1
if(isset($fbig[$n])){ 

입니다 해결하는 방법을 잘 모릅니다. 검사 할 어떤

  1. 는 (배열 $fbig이 값 $n이 포함 된 경우 검사)하지만 in_array($n, $fbig) (인덱스 $n의 배열에 뭔가가 있는지 확인하는) isset($fbig[$n]) 없습니다.

  2. 배열 $fbig은 외부에 정의되어 있기 때문에 함수의 범위에 포함되지 않습니다. 그러나 당신은 그것을 전달할 수 있습니다

if(isprime($b, $fbig)){echo "lol";}

가 잘 작동합니다.

1

하면이 아닌 값, 키를 찾으

$fbig[11]이 설정되어 있기 때문에

당신은 11 개 항목이이 경우에 in_array()

를 사용하는 것이 좋습니다 있지만 번호가 있습니다 Sarfraz 말했듯이 0-10에서, 아니 11

플러스, 그것은

0

그것은 당신의 쿵푸 때문이다 글로벌 될 필요가 없다 nuction은 $ fbig가 무엇인지 알지 못합니다. 빠른 수정은 다음과 같이 함수를 변경하는 것입니다 :

function isprime($n){ 

    global $fbig; 

    if($n < 2){ 
     return FALSE; 
    } 
    if($n > 2147483647){ 
     return FALSE; 
    } 
    if($n < 46341){ 
     return isset($fbig[$n]); // Nit picking fix! 
    } 
} 
+0

당신의 'Nit picking fix'는 훌륭하지만, cgoddard에 의해 설명 된대로'isset()'대신'in_array()'가 사용되어야합니다 – bearver

관련 문제