Laravel从Request中过滤(移除)null和空数组值



在我的laravel请求中,我发送的数据如下所示。。

{
"user_id":13,
"location":null,
"about":"This Is About the user",
"avatar":[],
"users":[
{
"user_name":"John",
"age":"30",
},
{
"user_name":"Jessy",
"age":"30",
}
]
}

所有请求键都可以为null或包含一个值(数组或字符串(,所以我只想过滤有值的键。

预期输出:

{
"user_id":13,
"about":"This Is About the user",
"users":[
{
"user_name":"John",
"age":"30",
},
{
"user_name":"Jessy",
"age":"30",
}
]
}

我试过

$userRequestData = $request->only([
'location','about','avatar','users'
]);
$Data = array_filter($userRequestData, 'strlen');

但只有当请求只有字符串值时,它才有效。。。

即使它是字符串或数组,我如何过滤它?

如果不将'strlen'参数传递给array_filter,它将过滤出falsy值:

$request = [
"user_id"=>13,
"location"=>null,
"about"=>"This Is About the user",
"avatar"=>[],
"users"=>[
[
"user_name"=>"John",
"age"=>"30",
],
[
"user_name"=>"Jessy",
"age"=>"30",
]
]
];

将成为

$request = [
"user_id"=>13,
"about"=>"This Is About the user",
"users"=>[
[
"user_name"=>"John",
"age"=>"30",
],
[
"user_name"=>"Jessy",
"age"=>"30",
]
]
];

array_filter 文档

在你的例子中,你可以这样做:

$userRequestData = array_filter($userRequestData);

您可以使用集合过滤空值

collect(request()->all())->filter()

$result = collect(request()->all())->filter(function ($request){
return is_string($request)&&!empty($request)||is_array($request)&&count($request);
});

获取阵列

$result = collect(request()->all())->filter()->toArray()

或用于自定义

$result = collect(request()->all())->filter(function ($request){
return is_string($request)&&!empty($request)||is_array($request)&&count($request);

})->toArray();

最新更新