在php中,数组被认为是布尔值吗?

时间:2012-03-23 16:40:34

标签: php casting type-conversion

我在这里有一个简单的问题。我知道cakePHP find('first')函数返回一个包含第一个结果的数组(如果找到),否则返回false。我的问题是,如果我写这样的支票怎么办:

if(result_is_array) // that means I have data
{
    // do something
}
else // that means result is a boolean
{
    // do something else
}

我可以只说:

而不是检查从find('first')获得的结果是否是数组?
$result = $this->MyModel->find('first');
if($result)
{
    // do something
}

顺便说一句,如果我在这里得到一个数组,那么它会在php中评估为TRUE吗?在PHP中if(array())等于true吗?

6 个答案:

答案 0 :(得分:8)

是的,你可以做到

$result = $this->MyModel->find('first');
if($result)

length > 0的数组返回true

Explanation is here in the docs

  

转换为布尔值时,以下值被视为FALSE

     
      
  • 包含零元素的数组
  •   
     

其他每个值都被视为TRUE

答案 1 :(得分:2)

  

而不是检查从find('first')获得的结果是否是   数组与否

是。第二种方式:if ($result)。如果find返回空数组或布尔值false,则不会执行分支。

以这种方式执行此操作的最佳部分是使读者清楚知道您正在检查非空值。

答案 2 :(得分:1)

零值数组是false

包含值的数组为true

您可以查看this table以查看评估为true vs false的内容。

答案 3 :(得分:1)

根据the documentation,如果你试图将一个数组视为一个布尔值,那么当数组不为空时,该数组将被认为是真的。

答案 4 :(得分:0)

空数组总是会计算为false,或者如果它包含任何键/值,那么它将计算为true。如果$this->MyModel->find('first');总是返回一个数组,那么空结果将评估为false,而其他方式则为true。所以你的代码完全有效。

答案 5 :(得分:0)

如果您要查找TRUE值,请使用以下内容:

if ( $result !== false )
{
    // do something
}