2011-11-12 4 views
0

Pourquoi ma fonction renvoie-t-elle toujours false? Je pense que le problème est causé par la fonction isset, mais je ne sais pas vraiment comment le résoudrePourquoi ma fonction renvoie-t-elle toujours 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

Où est '$ fbig' dans votre fonction? –

Répondre

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

Cette ligne est le problème.

  1. Qu'est-ce que vous voulez vérifier est pas isset($fbig[$n]) (qui vérifie s'il y a quelque chose dans le tableau à l'index $n) mais in_array($n, $fbig) (qui vérifie si le tableau $fbig contient la valeur $n).

  2. Le tableau $fbig ne fait pas partie de la portée de la fonction car il est défini à l'extérieur. Mais vous pouvez le transmettre:

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

devrait fonctionner très bien.

1

parce que votre recherche d'une clé, pas une valeur

$fbig[11] est pas défini

vous voulez utiliser in_array()

dans ce cas, il y a 11 articles, mais ils sont numérotés de 0-10, n ° 11

plus, comme l'a dit Sarfraz, il doit être globale

0

C'est parce que votre fu nction ne sait pas ce que $ fbig est. Une solution rapide serait de changer votre fonction pour ressembler à ceci:

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

Votre 'Nit picking fix' est génial mais 'in_array()' aurait dû être utilisé à la place de 'isset()' comme décrit par cgoddard – bearver

Questions connexes