我处于一个非常令人费解的境地。最初,当用户访问特定页面时,会显示弹出窗口。用户可以接受或拒绝它。当用户拒绝它时,在5次访问之后,再次向用户显示弹出窗口。这部分工作得很好。当用户单击“确定”时,将进行ajax调用,并将SESSION
变量设置为ok
。最初可以说$_SESSION['count'] = 0
。我有两个条件陈述。
if($_SESSION['count']%5 === 0)
{ // do something
}
elseif($_SESSION['count'] === "ok")
{ // do something
}
现在,当用户按ok
时,会更新$_SESSION['count'] = "ok"
进行ajax调用。
当用户再次重新加载页面时,即使if($_SESSION['count']%5 === 0)
现在为$_SESSION['count']
,条件ok
也会生效。经过多次实验后,我开始知道在php中我能够通过string
划分或找到模number
,这将导致zero
。我怎么处理这个?
答案 0 :(得分:6)
您可以使用is_numeric
来检查它是否为计数或“确定”
http://php.net/manual/en/function.is-numeric.php
if(is_numeric($_SESSION['count']) && $_SESSION['count']%5 === 0)
{ // do something
}
elseif($_SESSION['count'] === "ok")
{ // do something
}
虽然一般情况下,我会将ok
设置为$_SESSION
中不同变量的值作为最佳做法。如果我查看代码,我会发现看到一个名为count
的字符串值很奇怪。
答案 1 :(得分:3)
PHP非常善于隐式转换。
您的问题的解决方案只是重新安排您的if else
树。
if($_SESSION['count'] === "ok")
{
// do something
}
elseif($_SESSION['count'] % 5 === 0)
{
// do something
}
可读性
要记住的是,变量count
应该包含一个值。也许使用不同的变量可能会使您的代码对读者不那么困惑。
答案 2 :(得分:1)
在php (int) "some string" == 0
中,因此在执行模数之前检查$_SESSION['count']
是否为整数(例如,使用is_numeric()
)。
答案 3 :(得分:1)
检查此工作示例。它可能有所帮助:
if(!isset($_SESSION['foo'])) {
$_SESSION['foo'] = 0;
} else {
$_SESSION['foo']++;
}
var_dump($_SESSION['foo']%3);
答案 4 :(得分:1)
if(is_numeric($_SESSION['count']) AND $_SESSION['count']%5 === 0)
{ // do something
}
elseif($_SESSION['count'] === "ok")
{ // do something
}