为什么我的函数总是返回 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";}
why does my function always return false?
i think the problem is caused by the isset function but i really dont know how to fix it
$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";}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这条线就是问题所在。
您要检查的不是
isset($fbig[$n])
(它检查数组中索引$n
处是否有内容),而是in_array($n, $fbig)
(检查数组$fbig
是否包含值$n
)。数组
$fbig
不在函数的范围内,因为它是在外部定义的。但您可以传递它:if(isprime($b, $fbig)){echo "lol";}
应该可以正常工作。
This line is the problem.
What you want to check is not
isset($fbig[$n])
(which checks if there is something in the array at the index$n
) butin_array($n, $fbig)
(which checks if the array$fbig
contains the value$n
).The array
$fbig
is not in the scope of the function since it's defined outside. But you can pass it:if(isprime($b, $fbig)){echo "lol";}
should work just fine.
因为您要查找的是键,而不是值
$fbig[11]
未设置,所以您需要使用
in_array()
在这种情况下,有 11 个项目,但它们的编号是从0到10,没有11
加上,就像萨弗拉兹所说,它需要是全球性的
because your looking for a key, not a value
$fbig[11]
is not setyou'll want to use
in_array()
in this case, there are 11 items, but they are numbered from 0-10, no 11
plus, like Sarfraz said, it needs to be global
这是因为你的函数不知道 $fbig 是什么。一个快速解决方法是将您的函数更改为如下所示:
It's because your function doesn't know what $fbig is. A quick fix would be to change your function to look like this: