[PHP-users 16558]Re: '001E0'と'00001'が同じ値?
Youichi Iwakiri
yiwakiri @ st.rim.or.jp
2003年 7月 8日 (火) 14:47:04 JST
いわきりです
gotou wrote in <EIEAIDJJDDIEBLHOLHPCGEMCCAAA.gotou @ hokkou.co.jp> :
>今、配列内のデータと、データベースから呼び出したデータを
>array_searchで比較して、データが配列内にあった場合
><select>で選択させる、というプログラムがあります。
>そのときに、
>配列データ = データベースのデータ
> 001E0 = 00001
> 001E1 = 00010
> 001E2 = 00100
>という風に評価されてしまい、余分な3件のデータが選択されてしまいます。
>
>’001E0’の’E’というのが曲者なのかな、と浅知恵ながら思っているのですが、
>それをどうすればよいのか、というのがわかりません。
1E0 といった書き方は浮動小数点表記のため、数値として扱われます。
PHPの余計なお節介の一つに、英数字混じりの文字列を可能な限り数値として
評価する実装があります。
echo (001E0 == 1) ? "true\n" : "false\n";
echo ("001E0" == 00001) ? "true\n" : "false\n";
echo ("001E0" == "1") ? "true\n" : "false\n";
echo ("001E0" == "00001") ? "true\n" : "false\n";
echo ("001E0" == "0.1E1") ? "true\n" : "false\n";
echo ((string)"001E0" == (string)"00001") ? "true\n" : "false\n";
echo ("001E0" === "00001") ? "true\n" : "false\n";
PHPによる比較がどういう風に評価されるかを押さえて下さい。
#余計なお世話に悩まされない為には '==='を意図的に使うべきです。
--
Youichi Iwakiri
PHP-users メーリングリストの案内