[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 メーリングリストの案内