2011-11-12 87 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