0

我有一个会话变量 $_SESSION['condition'],我知道它已设置,因为当我输入以下内容时:

echo $_SESSION['condition']." = "."Below Average";

它返回:

Below Average = Below Average

当我对会话变量执行 gettype() 时,它返回类型“字符串”。

然而,当我执行 strcmp() 时,它返回:-34

我还尝试了一个带有 == 的 IF 语句,而不是 strcmp 测试相等性和一个 IF 语句将它们都转换为字符串并测试它们是否相等但没有运气。

这可能是什么原因?

4

2 回答 2

2

strcmp() 可能存在导致此问题的空格或不可见字符。您可以使用 trim() 来帮助清理字符串,然后使用文字等式运算符 === 来测试真正的相等性。见下文

$condition = trim($_SESSION['condition']);

if ($condition === 'Below Average') {
    echo 'True';
} else {
    echo 'Nope!';
}

看看这是否有帮助。

此外,您可以使用 var_dump($_SESSION['condition']); 检查值。

于 2013-09-13T23:26:52.173 回答
0

strcmp()函数(通常)返回字符串之间第一个不同字符的差异。

因此,如果您的字符串在任何地方存在差异,请strcmp()停在那里并返回两个字符的 ASCII 值之间的差异。

正如 Barmar 在评论中指出的那样,空格和 B 之间的差异是 -34,我相信情况就是如此。

这可以通过以下方式确认:

$v1 = ord(' ') - ord('B');
$v2 = strcmp('B', ' ');

if($v1 == $v2) {
    echo 'True';
}

输出:

True

演示!

为确保不会发生这种情况,您可以trim()按照 Rottingham 的建议使用,也可以使用正则表达式来去除所有不需要的字符。

替换所有空格:

$string = preg_replace('/\s+/', ' ', $string); 

要从开头和结尾删除空格:

$string = trim($string);

希望这可以帮助!

于 2013-09-14T00:03:32.477 回答