PHP のベテランも初心者も、この質問は興味深いものです。
$id1="42022219860323211";<br /> $id2="42022219860323210";<br /> if($id1==$id2){<br /> echo"这两个身份证相同";<br />}else{<br /> echo"这两个身份证不相同";<br /><br />}
ログイン後にコピー
理論的には
2 つの ID カードは同じではありません
が実際の出力となります。
私の Web 環境と別の同僚の出力は同じです
私の同僚の 2 つの ID カードは異なります
。
これ 2 つの変数は文字列
として出力されます。PHP の設定に違いはありますか?
------解決策のアイデア----------------------次に ===
を使用します
------解決策のアイデア----------------------PHP_INT_MAX を出力し、2 つの数値を確認します。 PHP で許可される整数の範囲
比較には === を使用することをお勧めします。
------解決案----------------------原因が判明したようです
PHP の比較演算子は少し奇妙で間違いやすいです。比較ルールは次のとおりです。
1. 2 つの文字のサイズを比較する場合、2 つの文字の ASCII コード サイズが比較されます。 - この記事はわかりやすいです。
2. 2 つの文字列のサイズを比較する場合、最初の文字から開始して、対応する特定の位置から開始する限り、一方の文字列の現在位置が比較されます。文字が別の文字列内の対応する文字より大きい場合、「ba」>「az」など、2 つの文字列のサイズを直接決定できます。これは誰もが知っています。
次に、「10」と「a」を比較します。もちろん、それは同じです。まず、「1」と「a」の ASCII コードを比較します。「a」の方が大きいです。
3. 数値を文字列/文字と比較する場合、システムはまず文字列/文字を整数/浮動小数点型に変換しようとします。たとえば、「12bsd」は変換されます。 「a」は 0 に変換されます。このとき、対応する ASCII コードの値は数値と比較されないことに注意してください。
実際、同様に、「a」10 の結果も 10 になります。
これは無視するのが簡単です。0 を数値に変換できない文字列 (演算子は ==) と比較すると、どちらも true を返します。
最終的に次の結果が表示されます:
1 var_dump('1000000'<'a'); //結果: boolean true
2 var_dump('a'<1) ); //結果: boolean true
3 var_dump(1
は従来の考え方とは少し異なります。 。