【问题标题】:Why Laravel return array not working with empty() But worked with count()为什么 Laravel 返回数组不能与 empty() 一起使用但与 count() 一起使用
【发布时间】:2017-07-19 16:43:20
【问题描述】:

我正在使用 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() 检查变量是否设置,所以我在所有返回数组或对象数组中使用 empty()。

请帮助某人。

提前致谢!

【问题讨论】:

  • 您的查询返回结果且不为空,因此计数始终大于零,请使用 !empty($result) 条件检查
  • 但在上述情况下,为什么它要计数()而不是空()。该数组不从数据库返回任何值,因此 !empty() 将给出不正确的 true。 @RAUSHANKUMAR
  • 因为 first() 查询返回一个集合对象,所以最好使用 isEmpty() 函数
  • 是的集合对象使用 php 的 count() 内置方法和 isEmpty() 是 laravel 方法,所以它当然可以工作。谢谢你的建议!

标签: php laravel count


【解决方案1】:

如果你使用集合,你应该使用isEmpty()方法

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

【讨论】:

  • 是的正确,所以我可以使用 count() 或 isEmpty().. 对吗?
  • 是的,两者都很好:)
  • 是的,isEmpty() 是 laravel 方法和 count() php 常用方法。感谢您的帮助!
  • 也有一个方法->count() 用于收集。没问题
【解决方案2】:

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

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

当你用->get()方法获取数据时,不能简单的使用following,

if(empty($data)){ 

}

if(!data){ 

}

if($data){ 

}

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

isEmpty($data) or 

count($data) or 

$data->count()

【讨论】:

  • 感谢您的建议!
  • 我认为first() 应该没有问题,因为如果找不到数据,它将返回 null。我想知道为什么
  • 我用 get() 编辑了问题...感谢您的更正,您的回答很有效,对您有很大帮助!
  • @RJParikh 恭喜,很高兴它帮助了你:D
【解决方案3】:

来自php docs

判断一个变量是否被认为是空的。如果一个变量不存在或者它的值等于 FALSE,它就被认为是空的。如果变量不存在,empty() 不会生成警告。

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

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

【讨论】:

  • 好的……谢谢你的帮助:)
【解决方案4】:

条件试试这个:

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

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

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多