Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从请求中删除特定的嵌套数组键_Php_Laravel - Fatal编程技术网

Php 从请求中删除特定的嵌套数组键

Php 从请求中删除特定的嵌套数组键,php,laravel,Php,Laravel,我遇到了一个特定的问题,需要从请求中删除特定的嵌套数组键,这样它就不会存储在数据库中。我创建了一个请求类,到目前为止,我就是这样尝试的: 这是我在表单提交后从请求中获得的数据: "options" => array:2 [▼ "product_options" => array:1 [▶] "additional_product_options" => array:1 [▼ "Tenetur dolor labore" => null

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

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

  "options" => array:2 [▼
    "product_options" => array:1 [▶]
    "additional_product_options" => array:1 [▼
      "Tenetur dolor labore" => null
    ]
  ]
正如您所看到的,
additional\u product\u options
array有一个值为空的键,所以我想从数组中完全删除这个键。我使用
unset()
array\u 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\u 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
    ]
  ]

在理想情况下,
teneur dolor labore
键将被完全删除,
additional\u product\u options
数组将为空。我做错了什么?

试试这个。。。我对当前选项阵列进行了测试:

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

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


结果是删除我们想要的键…

只是为了检查
$this->input()
这是一个返回值的方法。因此,每次调用它时,这是一个新值还是将值设置回它从何处获取数据?array_filter不会删除数据,它会过滤掉特定数组中的数据。@NigelRen the$this->input()实际上返回提交表单时发送的所有数据,所以当表单数据发生变化时,它会发生变化。我的观点是,您实际上并没有存储这些数据并操作这些值,而是不断地检索这些数据并更改其返回值。在
if
中,类似于
$options=$this->input('options')['additional_product_options']
然后处理
$options
。我明白你现在说的,我会尝试这样做。嗯,这会起作用,但每次我提交新表单时,我都会得到不同的
附加产品选项
键,所以这必须更加动态。
  unset($options['product_options']['additional_product_options']['Tenetur dolor labore']);