count() 参数必须是数组或在laravel中实现countable的对象

far*_*raz 18 php laravel

这是这里的代码:

protected function credentials(Request $request)
{
    $admin=admin::where('email',$request->email)->first();
    if(count($admin))
    {
       if($admin->status==0){
           return ['email'=>'inactive','password'=>'You are not an active person, Please contact to admin'];
           }
           else{
               return ['email'=>$request->email,'password'=>$request->password,'status'=>1];
           }
       }
       return $request->only($this->username(), 'password');
    }
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,此错误变为:

“count(): 参数必须是一个数组或一个实现 Countable 的对象”

Jer*_*alo 31

这是我的解决方案:

count(array($variable));
Run Code Online (Sandbox Code Playgroud)

希望它有效!

  • 小心..如果 $variable 已经是一个数组,它将是 [[$variable]] 并且 count 将为 1 (12认同)
  • 这是错误的,count 始终为 1。您计算的是一个包含 $variable 单个值的数组,无论 $variable 包含什么。 (2认同)

Dmy*_*Huz 20

发生这种情况是因为在 PHP 7.2 中 count() 返回警告为 NULL。你可以尝试改变

count($admin)
Run Code Online (Sandbox Code Playgroud)

count((is_countable($admin)?$admin:[]))
Run Code Online (Sandbox Code Playgroud)

  • FWIW: is_countable() 是在 PHP7.3 中引入的。 (4认同)

Teo*_*gır 6

注意这里,当你使用count()方法时,应该有可数元素,比如实现 的数组或对象ArrayAccess

Admin::where('email',$request->email)->first();
Run Code Online (Sandbox Code Playgroud)

但是该first()方法为您提供单个元素,而不是集合或数组。该get()方法返回一个包含找到元素的可数集合

您可以直接检查变量本身是否已定义或为空,而不是使用计数

if($admin){
  // do something here
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用is_null()方法

if(!is_null($admin)){
  // do something here
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以将变量转换为数组:

count((array)$variable);
Run Code Online (Sandbox Code Playgroud)

如果它为空,那么它将成为一个空数组。