一个字符串的模数

时间:2013-05-03 13:22:28

标签: php

我处于一个非常令人费解的境地。最初,当用户访问特定页面时,会显示弹出窗口。用户可以接受或拒绝它。当用户拒绝它时,在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。我怎么处理这个?

5 个答案:

答案 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 
}