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']。两者之间的唯一区别是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 本身
  • 整数 0(零)
  • ...

这并不是说布尔 FALSE == 整数 0。

于 2012-05-13T21:20:28.733 回答