0

我处于一个非常令人费解的境地。最初,当用户访问特定页面时,会显示一个弹出窗口。用户可以接受或拒绝。当用户拒绝它时,在 5 个页面访问后,弹出窗口再次显示给用户。这部分工作完美。当用户单击确定时,将进行 ajax 调用并将SESSION变量设置为ok. 让我们先说$_SESSION['count'] = 0。我有两个条件语句。

if($_SESSION['count']%5 === 0)
{ // do something
}
elseif($_SESSION['count'] === "ok")
{ // do something 
}

现在,当用户按下时ok,会更新一个 ajax 调用$_SESSION['count'] = "ok"。当用户再次重新加载页面时,if($_SESSION['count']%5 === 0)即使$_SESSION['count']是 now ,条件也会变为真ok。后来经过大量试验,我开始知道在 php 中我可以除以或找到模数stringnumber从而得到zero. 我该如何处理?

4

5 回答 5

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的具有字符串值的东西非常奇怪。

于 2013-05-03T13:25:53.420 回答
3

PHP 非常擅长隐式转换。

解决您的问题的方法就是重新排列您的if else树。

if($_SESSION['count'] === "ok")
{ 
    // do something
}
elseif($_SESSION['count'] % 5 === 0)
{ 
    // do something 
}

可读性

需要记住的是,变量count应该真正包含一个值。也许使用不同的变量可能会使您的代码对读者来说不那么混乱。

于 2013-05-03T13:24:58.777 回答
1
if(is_numeric($_SESSION['count']) AND $_SESSION['count']%5 === 0)
{ // do something
}
elseif($_SESSION['count'] === "ok")
{ // do something 
}
于 2013-05-03T13:35:59.770 回答
1

在 php 中,在进行取模之前(int) "some string" == 0检查是否$_SESSION['count']是整数(例如使用)。is_numeric()

于 2013-05-03T13:26:30.950 回答
1

检查这个工作示例。它可能会有所帮助:

if(!isset($_SESSION['foo'])) {
    $_SESSION['foo'] = 0;
} else {
    $_SESSION['foo']++;
}

var_dump($_SESSION['foo']%3);
于 2013-05-03T13:28:07.933 回答