PHP の数値と文字列における一般的なトラップの詳細な説明

伊谢尔伦
リリース: 2023-03-10 22:28:02
オリジナル
1776 人が閲覧しました

0 ( 演算子 は ==) を、数値ではない先頭の 文字列 (つまり、数値に変換できない文字) と比較すると、すべて true が返されます。

その理由は、数値と文字列を比較する場合、まず文字列を数値に変換してから比較します。文字列を数値に変換できない場合、変換結果は 0 になります。したがって、PHP では、0 と比較すると常に true が返されます。 2 つの数値文字列 (数値の文字列のみ) を直接数値に変換して比較する場合

以下の例: (2 つの変数 $a と $b の最後の桁が等しくないことに注意してください)

サンプルコード:

<?php 
$a = &#39;511203199106034578&#39;; 
$b = &#39;511203199106034579&#39;; 
if ($a==$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
ログイン後にコピー

上記を実行すると、結果は等しいことが分かりました(思った結果ではありません) $a と $b にそれぞれ文字 a を追加しました

<?php 
$a = &#39;a511203199106034578&#39;; 
$b = &#39;a511203199106034579&#39;; 
if ($a==$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
ログイン後にコピー

今回の出力は notEqual (正しい結果) です。

説明: PHP は 2 つの数値文字列を数値型に変換し、2 つの数値が正確に等しいため、上の例は等しいです

<?php 
$a = 511203199106034578; 
$b = 511203199106034579; 
echo $a; // 输出 5.1120319910603E+17 即511203199106030000 
echo $b; // 输出 5.1120319910603E+17 即511203199106030000 
?>
ログイン後にコピー

したがって、例で得られた結果は等しいです

この予期しない結果を回避するには、型比較を使用します演算子 == =次の例 ($a が $b に等しく、型も同じ場合)

<?php 
$a = &#39;511203199106034578&#39;; 
$b = &#39;511203199106034579&#39;; 
if ($a===$b) { 
echo &#39;equal&#39;; 
} else { 
echo &#39;notEqual&#39;; 
} 
?>
ログイン後にコピー

例で説明します

<?php
$str1 = "123456789012345678";
$str2 = "123456789012345679";
if($str1 == $str2){
 echo "1.equal\n";
}esle{
 echo "1.not equal\n";
}
if($str1 === $str2){
 echo "2.equal\n";
}esle{
 echo "2.not equal\n";
}
if(strcmp($st1, $str2)==0){
 echo "3.equal\n";
}esle{
 echo "3.not equal\n";
}
if($str1 == $str2){
 echo "1.equal\n";
}esle{
 echo "1.not equal\n";
}
ログイン後にコピー

実行後の結果は非常に奇妙です:

1.equal

2.等しくない

3 .等しくない

PHPが2つの数値文字列を比較するとき、最初に2つの文字列を数値として扱い、2つの文字列を科学的表記法で保存します。ビット。つまり、格納時は $str1=1.2345678901234567E+17; $str2=1.2345678901234567E+17 となります。したがって、$str1==$str2 と判断されます。長さが異なる、文字列に数値以外の文字を追加するなどすると、2 つの文字列が等しくなくなります。したがって、

データ型

が判定できる場合は3番目の等号判定を使用するか、強い型判定を行う場合はstrcmpまたはstrcasecmpを使用することをお勧めします。

以上がPHP の数値と文字列における一般的なトラップの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート