我有一个会话变量$ _SESSION ['condition'],我知道它已设置,因为当我输入这个:
echo $_SESSION['condition']." = "."Below Average";
它返回:
Below Average = Below Average
当我在会话变量上执行gettype()时,它返回类型“string”。
然而,当我执行strcmp()时,它返回:-34
我还尝试了一个IF语句,使用==而不是strcmp测试相等性和一个IF语句将它们作为字符串转换并测试它们是否相等而没有运气。
这可能是什么原因?
答案 0 :(得分:2)
可能有一个空格或不可见的字符导致strcmp()出现此问题。您可以使用trim()来帮助清理字符串,然后使用文字方程运算符,===来测试真正的相等性。见下文
$condition = trim($_SESSION['condition']);
if ($condition === 'Below Average') {
echo 'True';
} else {
echo 'Nope!';
}
看看这是否有帮助。
另外,你可以使用var_dump($ _ SESSION ['condition']);检查价值。
答案 1 :(得分: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);
希望这有帮助!