簡體   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