2011-11-12 14 views
0

なぜ私の関数は常にfalseを返しますか? iは問題が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]は、あなたがこのケースでin_array()

を使用したいと思う

に設定されていないため、そこに11個の項目がありますが、それらは番号が付けられています0-10から、無11

プラス、Sarfrazは、それはあなたのカンフーためですグローバル

0

にする必要があり、言ったように$ 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

関連する問題