почему моя функция всегда возвращает false?

почему моя функция всегда возвращает 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";}

person user1043065    schedule 12.11.2011    source источник
comment
где $fbig в вашей функции?   -  person Book Of Zeus    schedule 12.11.2011


Ответы (3)


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

Эта линия является проблемой.

  1. То, что вы хотите проверить, это не isset($fbig[$n]) (который проверяет, есть ли что-то в массиве по индексу $n), а in_array($n, $fbig) (который проверяет, содержит ли массив $fbig значение $n).

  2. Массив $fbig не входит в область действия функции, так как он определен снаружи. Но пройти можно:

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

должно работать нормально.

person Quasdunk    schedule 12.11.2011

потому что вы ищете ключ, а не значение

$fbig[11] не установлен

вы захотите использовать in_array()

в данном случае 11 пунктов, но они пронумерованы от 0-10, а не 11

плюс, как сказал Сарфраз, он должен быть глобальным

person topherg    schedule 12.11.2011

Это потому, что ваша функция не знает, что такое $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!
    }
}
person Rich Bradshaw    schedule 12.11.2011
comment
Ваше «исправление придирки» великолепно, но in_array() следовало использовать вместо isset(), как описано cgoddard. - person bearvrrr; 12.11.2011