为什么我的函数总是返回false?

时间:2011-11-12 13:35:45

标签: php arrays if-statement isset

为什么我的函数总是返回false? 我认为问题是由isset函数引起的,但我真的不知道如何修复它

$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";}

3 个答案:

答案 0 :(得分:1)

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

这一行是问题所在。

  1. 您要检查的内容不是isset($fbig[$n])(它检查数组中的某些内容是否位于索引$n),而是in_array($n, $fbig)(它会检查数组{ {1}}包含值$fbig)。

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

  3. $fbig

    应该可以正常工作。

答案 1 :(得分:1)

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

$fbig[11]未设置

您想要使用in_array()

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

正如Sarfraz所说,它需要是全球性的

答案 2 :(得分: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!
    }
}