【问题标题】:Laravel filter(remove) null and empty array values from RequestLaravel 过滤器(删除)请求中的 null 和空数组值
【发布时间】:2021-07-14 22:36:22
【问题描述】:

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

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

所有请求键都可以为空或保存一个值(数组或字符串),因此我只想过滤具有值的键。

预期输出:

{
    "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');

但只有在请求只有字符串值时才有效...

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

【问题讨论】:

  • 您是否还想过滤嵌套的键值,例如用户内部的user_name 键?

标签: php laravel


【解决方案1】:

如果不将'strlen'参数传递给array_filter,它将过滤掉falsyvalues:

$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",
        ]
    ]
];

Documentation for array_filter

在您的示例中,您可以这样做:

$userRequestData = array_filter($userRequestData);

【讨论】:

    【解决方案2】:

    您可以使用集合来过滤空值

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-13
      • 2014-09-13
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2018-06-06
      相关资源
      最近更新 更多