我正在尝试访问发送到我的API的嵌套数组中的值,但是当执行$ data ['inputs'] {0}之类的操作时,只有在我想要的是值的整个值,而不是键的整个值,但是如果我尝试类似$ data ['inputs'] ['type']之类的操作,则会给我一个偏移量错误,我会确保如何正确地访问所需的值
public function saveEdit(Request $request)
{
try {
$unsanitizedData = $request->all();
$data = [];
$fid = $unsanitizedData['formId'];
$data['form_name'] = json_encode($unsanitizedData['cred']['name']);
$data['org'] = json_encode($unsanitizedData['cred']['organization']);
$data['updated_by'] = json_encode($unsanitizedData['updatedBy']);
$data['user_id'] = json_encode($unsanitizedData['id']);
$data['activated'] = json_encode($unsanitizedData['cred']['activated']);
$data['inputs'] = json_encode($unsanitizedData['cred']['inputs']);
$pattren = array("[","]","'",'"',"/","\\");
$data = str_replace($pattren,'', $data);
foreach ($unsanitizedData as $st) {
admin_form::where('id', $fid)->update([
'form_name' => $data['form_name'],
'org' => $data['org'],
'updated_by' => $data['updated_by'],
'user_id' => $data['user_id'],
'activated' => $data['activated']
]);
foreach ($data['inputs'] as $input) {
admin_form_fields::where('form_id', $fid)->update([
'type' => $input,
'name' => $input
]);
}
}
$res['status'] = true;
$res['message'] = 'Success';
return response($res, 200);
} catch (\Illuminate\Database\QueryException $ex) {
$res['status'] = false;
$res['message'] = $ex->getMessage();
return response($res, 500);
}
}
我以为如果我在另一个foreach循环中使用一个foreach循环,那会起作用,因为它是一个嵌套数组,所以循环遍历主数组,然后遍历嵌套数组,但那也不起作用
我进行数据转储时的数据结构:
array:6 [
"form_name" => "Testname",
"org" => "TestOrg",
"updated_by" => "test",
"user_id" => "29",
"activated" => "false",
"inputs" => "{type:number,name:Phone},{type:input,name:Name},{type:input,name:Address},{type:email,name:Email}"
]
据我所见,您只需要使用json_decode($data['inputs'])
,因为您的数组实际上只是一个字符串:)
您的数据是一个字符串,您需要先对其进行解码并通过调用其键来获取值
在您的情况下,$data['inputs']
是JSON编码的字符串,您从中删除了[
和]
字符,因此当您尝试访问其第一个元素时,它是第一个字符(因为字符串kind of] > PHP中的字符串数组,它们实际上是C中的字符串数组)。
问题是,您首先调用json_encode()
。如果这是清除输入的方式,那么您做错了。由于您使用的是ORM,因此真正不需要手动清理输入。只需保持客户端发送的输入并执行所有操作,然后在QueryBuilder中使用未经过滤的操作即可]