1

だから私は多次元配列を持っています。ブール値を値として使用して、いくつかの配列キーを定義しています。

$geo_entries['hostip']['geoTypes']['country']=true;
$geo_entries['hostip']['geoTypes']['country_short']=true;
$geo_entries['hostip']['geoTypes']['city']=false;
$geo_entries['hostip']['geoTypes']['city_short']=false;

今、私はそれを行いprint_r()、これが結果です:

( [country] => 1 [country_short] => 1 [city] => [city_short] => )

私が間違っている場合は修正してくださいfalse==0

値を簡単にチェックしようとします(ブール値の場合):

if($geo_entries['hostip']['geoTypes']['city']==boolean){
//this returns false...
}

上記の条件はfalsewith ['hostip']['geoTypes']['city']but truewith を返します['hostip']['geoTypes']['country']。2 つの唯一の違いはcity、 の値falsecountryの値があることですtrue

0- の代わりに値を定義すると、falseすべてうまくいきます...

恥ずかしいほど見逃したことがあり、それがこの誤解につながっているような気がします。

説明したい人はいますか?- (なぜfalse!=0?)

4

5 に答える 5

3

変数 ( (bool) true/を含む(bool) false) をと比較していますboolean。Simple リテラルbooleanは定義されていません。PHP はそれを文字列として扱います。

if($geo_entries['hostip']['geoTypes']['city']==boolean)

したがって、

if($geo_entries['hostip']['geoTypes']['city']=="boolean")

==オペレーターは、それらを型ジャグリング後のものと比較します。"boolean"は空でない文字列であり、 として扱われ(bool) trueます。したがって、あなたの比較は、もちろん、どの(bool) true == (bool) trueリターンtrue(bool) false == (bool) trueどのリターンが返されるかということになりますfalse

于 2012-05-13T21:13:20.887 に答える
0

問題が設定ではなくprint_rを介した印刷にあることを確認できます。次の行はbool(false)を出力します

var_dump( $geo_entries['hostip']['geoTypes']['city']);

また、var_dump( $geo_entries['hostip']['geoTypes']['city'] == false);bool(true)を出力します

そしてvar_dump( $geo_entries['hostip']['geoTypes']['city'] == 0);bool(true)を出力します

少しトピックから外れている:一般に、特に複数の言語を使用する開発者にとって、コードを読みやすくするためにブール値を整数に処理することは避けることをお勧めします。

于 2012-05-13T21:02:51.087 に答える
0
foreach($geo_entries['hostip']['geoTypes'] as $key => $value) {
  echo $key . ' is ' . (is_bool($value) ? 'boolean' : 'not boolean') . '<br />'; 
}

出力:

country is boolean
country_short is boolean
city is boolean
city_short is boolean
于 2012-05-13T21:15:01.253 に答える
0

これは、PHP で型比較を行う方法ではありません。$foo変数がブール値かどうかを確認したい場合は、次のようにします。

if (is_bool($foo))
{
    // ...
}

あなたの例が実際に行っているのは、文字列として解釈し、ブール値として解釈するときにbooleanそれを考慮する必要があるかどうかを確認することです。trueこれにより、E_NOTICE メッセージが生成されます (エラー報告レベルによって表示される場合と表示されない場合があります)。

于 2012-05-13T21:16:31.613 に答える
0

チェックしている変数の型がブール値であるため、False は 0 と等しくありません。

http://us.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting

ドキュメントによると、次の値は false です。

  • ブール値の FALSE 自体
  • 整数 0 (ゼロ)
  • ...

これは、boolean FALSE == integer 0 とは言いません。

于 2012-05-13T21:20:28.733 に答える