0

セッション変数 $_SESSION['condition'] があります。これを入力したときに設定されていることがわかります。

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

戻り値:

Below Average = Below Average

セッション変数で gettype() を実行すると、タイプ「string」が返されます。

しかし、strcmp() を実行すると、-34 が返されます。

また、等しいかどうかをテストする strcmp ではなく == を使用した IF ステートメントと、それらの両方を文字列としてキャストし、それらが運が悪い場合に等しいかどうかをテストする IF ステートメントも試しました。

これが考えられる理由は何ですか?

4

2 に答える 2

0

strcmp()関数は (通常) 文字列間の最初の異なる文字の違いを返します。

そのため、どこかに文字列の違いがある場合は、そこでstrcmp()停止し、2 つの文字の 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 に答える