【问题标题】:Alternative to Laravel collection's only() and intersect() methods替代 Laravel 集合的 only() 和 intersect() 方法
【发布时间】:2017-02-16 01:37:45
【问题描述】:

$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 和验证。

【问题讨论】:

  • 你能详细说明你的问题和你想要达到的目标吗?
  • 我想要 $request 没有像 "input6..7..8" 这样的无效字段,但我想要由 intersect 删除的值为 0 的键。我不想要来自only() 的额外密钥。

标签: arrays laravel laravel-5


【解决方案1】:

这可能对您的情况有所帮助。此代码使用 Request 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】:

实现此目的的另一种方法是:

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

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

【讨论】:

【解决方案3】:

我觉得这个比较短。
$validated = array_intersect_key($request->all(), array_flip($validkeys));

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 2023-03-27
      相关资源
      最近更新 更多