【问题标题】:Laravel merge field in sub-arrays in the request请求中子数组中的 Laravel 合并字段
【发布时间】:2021-08-02 17:59:08
【问题描述】:

我正在从请求中收到此数据:

array:2 [
  0 => array:3 [
    "from" => 0
    "to" => 5
    "earned" => 0
  ]
  1 => array:3 [
    "from" => 5
    "to" => 10
    "earned" => 1
  ]
]

我想为每个子数组添加brand_id。

我知道我可以将一个字段合并到请求中,例如:

$request->merge([
    'brand_id' => $brand_id,
]);

结果:

array:3 [
  0 => array:3 [
    "from" => 0
    "to" => 5
    "earned" => 0
  ]
  1 => array:3 [
    "from" => 5
    "to" => 10
    "earned" => 1
  ]
  "brand_id" => "1"
]

我希望结果在哪里:

array:2 [
  0 => array:4 [
    "from" => 0
    "to" => 5
    "earned" => 0
    "brand_id" => "1"
  ]
  1 => array:4 [
    "from" => 5
    "to" => 10
    "earned" => 1
    "brand_id" => "1"
  ]
]

如果可以这样做就好了:

$request->merge([
    '*.brand_id' => $brand_id,
]);

注意:我已经检查了这个How to replace nested array value inside the Laravel request using merge?,但如果我要使用 foreach,我不需要进行请求合并。此外,Laravel 8 可能还有一些新东西。

【问题讨论】:

  • @JustCarty 好吧,不完全是,我已经在问题下面的注释中解释了。

标签: laravel laravel-8 laravel-request


【解决方案1】:

试试下面的代码。您可以迭代每个元素并合并。 (假设您使用的是请求对象)

$mergedArray = array_map(function($element) use ($brand_id){ 
    return array_merge($element, ['brand_id' => $brand_id]); 
}, $request->all())

【讨论】:

  • 这是一个很好的解决方案,我正在应用它,但我得到了一个错误:Undefined variable: brand_id 然后我在匿名函数定义中添加了$brand_id,这次得到了这个错误:Too few arguments to function App\\Http\\Controllers\\ShiftBreakController::App\\Http\\Controllers\\{closure}(), 1 passed and exactly 2 expected。以这种方式搜索array_map的用法。
  • 在这里找到正确的用法stackoverflow.com/questions/27599767/… 并得到$brand_id 变量,如function($element) use ($brand_id) 如果没有更好的建议,我会将您的答案标记为已接受@Kenath
  • 对不起,我忘了添加使用。我现在就更正一下。
猜你喜欢
  • 1970-01-01
  • 2019-07-18
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多