Laravel集合的only()和intersect()方法的替代方案

时间:2016-10-07 06:23:32

标签: arrays laravel laravel-5

$request
{ "input1":"50" , "input2":"0" , "input3":"60000" }

$validkeys
{ "input1" , "input2" , "input3", "input4", "input5" }

$request->only($validkeys)
[额外的键可以将之前的值更改为null]
{ "input1":"50" , "input2":"0" , "input3":"60000" , "input4":null , "input5":null }

$request->intersect($validkeys) [删除值为0]的键 { "input1":"50" , "input3":"60000" }

我想要的只是$request验证。

4 个答案:

答案 0 :(得分:2)

我认为这个更短 $validated = array_intersect_key($request->all(), array_flip($validkeys));

答案 1 :(得分:1)

这可能对你的情况有所帮助。此代码使用请求only方法获取请求密钥,然后将其置于集合中,使用$value !== null对其进行过滤,以便0仍然存在。

// Put request values into collection
$valid = collect($request->only('input1', 'input2', 'input3'));

// Filter values
$valid = $valid->filter(function ($value) {
    return $value !== null;
});

// We get it back as an array
$valid = $valid->all();

答案 2 :(得分:0)

实现这一目标的另一种方法是:

$requestValidKeys = $request->keys()->intersect($validkeys);
$requestValid = $request->only($requestValidKeys);

所以基本上你只交叉键。使用这些有效密钥,您可以拨打only()

答案 3 :(得分:0)

另一个选择是使用集合过滤$request,这可以使这个读取比数组翻转/交叉更清晰:

collect($request->all())->filter(function ($_, $key) {
    return collect($validKeys)->contains($key);
});