[英]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.