【问题标题】:Removing specific nested array key from request从请求中删除特定的嵌套数组键
【发布时间】:2020-05-29 03:48:53
【问题描述】:

我遇到了一个特定的问题,我需要从我的请求中删除特定的嵌套数组键,因此它不会存储在我的数据库中。我创建了一个 Request 类,这就是我目前尝试完成的方式:

这是我在表单提交后从请求中获得的数据:

  "options" => array:2 [▼
    "product_options" => array:1 [▶]
    "additional_product_options" => array:1 [▼
      "Tenetur dolor labore" => null
    ]
  ]

如您所见,additional_product_options 数组有一个值为空的键,因此我想从数组中完全删除该键。我使用unset() 和array_filter() 都尝试了这个,但我没有得到想要的结果。到目前为止,我是这样尝试的:

if(isset($this->input('options')['additional_product_options'])){
            foreach ($this->input('options')['additional_product_options'] as $key => $val){
                if(is_null($key) || is_null($val)){ //Check for null values
                    unset($this->input('options')['additional_product_options'][$key]); //Remove key from array
                }
            }
        }

在我用dd($this->options()) 转储我的请求后,我仍然在这个数组中获得Tenetur dolor labore 键:

array:2 [▼
  "product_options" => array:1 [▼
    "Et sit id culpa rep" => "sdad,ads"
  ]
  "additional_product_options" => array:1 [▼
    "Tenetur dolor labore" => null
  ]
]

使用array_filter(),我仍然得到相同的结果:

if(isset($this->input('options')['additional_product_options'])){
     array_filter($this->input('options')['additional_product_options']);
}

转储我的数据后,关键还在:

  "options" => array:2 [▼
    "product_options" => array:1 [▶]
    "additional_product_options" => array:1 [▼
      "Tenetur dolor labore" => null
    ]
  ]

在理想情况下,Tenetur dolor labore 键将被完全删除,additional_product_options 数组将为空。我在这里做错了什么?

【问题讨论】:

  • 只是为了检查$this->input() 这是一个返回值的方法。所以每次你调用它时,这将是一个新值,还是将值设置回它从哪里获取数据?
  • array_filter 不会删除数据,它会过滤掉特定数组中的数据。
  • @NigelRen $this->input() 实际上是返回表单提交时发送的所有数据,所以表单数据变化时会发生变化。
  • 我的意思是,您实际上并没有存储这些数据并操纵值,而是不断地检索它并更改它的回报。在if 内部,类似于$options = $this->input('options')['additional_product_options'];,然后处理$options。
  • 我明白你现在所说的,我会尝试这样做。

标签: php laravel


【解决方案1】:

试试这个...我已经测试了当前选项数组:

出于测试原因,我制作了选项数组:

   $options = ['product_options' => ['additional_product_options' => 
['Tenetur dolor labore' => null]], 'additional_product_options' => 'some value'];

然后

  unset($options['product_options']['additional_product_options']['Tenetur dolor labore']);

结果是按照我们的意愿删除密钥...

【讨论】:

  • 嗯,这会起作用,但每次我提交新表单时,我都会得到不同的additional_product_options 键,所以这必须更加动态。
猜你喜欢
  • 2021-12-01
  • 2019-11-02
  • 2021-07-23
  • 1970-01-01
  • 2014-03-21
  • 2020-04-03
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多