【发布时间】: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。 -
我明白你现在所说的,我会尝试这样做。