2011-11-12 63 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. 要检查什么是不isset($fbig[$n])(它检查是否有索引$n的东西在阵列中),但in_array($n, $fbig)(它会检查该数组$fbig包含值$n)。

  2. 数组$fbig不在函数的范围内,因为它是在外部定义的。但是,你可以通过它:

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

应该只是罚款。

1

因为你找的一个关键,而不是一个值

$fbig[11]未设置

你要使用in_array()

在这种情况下,有11个项目,但它们的编号从0-10,没有11

加,像Sarfraz说,它需要全球

0

这是因为你的福nction不知道$ 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'很好,但应该使用'in_array()'来代替'isset()',正如cgoddard所描述的 – bearver