为什么Laravel返回数组不能使用empty()但是使用count()

时间:2017-07-19 08:04:45

标签: php laravel count

我正在使用laravel框架项目并面临以下问题。

查询:

$query = DB::table('test');
$query->select('*');
$query->where('testId = 1');
$result = $query->get();
print_r($result);

输出

Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
        )

)

现在我正在检查$result是否有记录。

if(empty($result))
{
   echo "Not Empty check with empty()";
}

if(count($result) == 0)
{
   echo "Not Empty check with count()";
}

输出:

Not Empty check with count()

问题:

我在所有项目中都使用了empty(),但在 laravel框架项目中,我无法知道为什么$result进入count()条件,没有进入empty()

注意:

  

我已经读过count()与empty()比较慢也是空的()检查变量是否设置所以我在所有返回数组或对象数组中使用empty()。

请帮助别人。

提前致谢!

4 个答案:

答案 0 :(得分:3)

如果您使用集合,则可以使用isEmpty()方法

docs:https://laravel.com/docs/5.4/collections#method-isempty

答案 1 :(得分:2)

使用->get()方法,您将获得一个集合实例。

当您对从get方法获取的数据应用empty()时,即使没有结果,您也会注意到始终会返回Illuminate\Support\Collection的实例。

使用->get()方法获取数据时,您无法简单地使用以下内容,

if(empty($data)){ 

}

if(!data){ 

}

if($data){ 

}

而不是上面你可以简单地使用,

isEmpty($data) or 

count($data) or 

$data->count()

答案 2 :(得分:1)

来自php docs

  

确定变量是否为空。如果变量不存在或者其值等于FALSE,则该变量被视为空。如果变量不存在,empty()不会生成警告。

laravel集合类实现Countable interface,允许您使用count函数。如果您检查集合类,则会看到count方法返回内部项的计数。

empty函数没有接口,因此在这种情况下,它只检查变量是否未设置或等于false,如果检查对象,则显然不适用the None

答案 3 :(得分:0)

条件试试这个:

if(empty($result->toArray()))
{
    echo "Not Empty check with empty()";
}

if(count($result) == 0)
{
   echo "Not Empty check with count()";
}