繁体   English   中英

PHP strcmp没有返回会话变量的正确答案

[英]PHP strcmp is not returning the correct answer with session variable

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

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

它返回:

Below Average = Below Average

当我在会话变量上执行gettype()时,它返回类型“string”。

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

我也尝试过使用==而不是strcmp测试相等的IF语句和一个IF语句将它们作为字符串转换并测试它们是否相等而没有运气。

这可能是什么原因?

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

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

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

看看是否有帮助。

另外,你可以使用var_dump($ _ SESSION ['condition']); 检查价值。

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);

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM